本篇的基礎(chǔ)知識(shí):
- git常用操作命令
- cocoapods基本使用
- cocoapods本地私有庫(kù)的使用
- cocoapods遠(yuǎn)程私有庫(kù)的使用
一、git
1、git分為三個(gè)區(qū):工作區(qū)、暫緩區(qū)、分支(默認(rèn)master)。
2、源代碼管理工具git的一般使用流程
cd 進(jìn)入文件夾
git init 初始化本地倉(cāng)庫(kù)(會(huì)生成.git隱藏文件夾)
git status 查看文件狀態(tài)
git add . 添加文件到暫緩區(qū)
git commit -m "注釋" 從暫緩區(qū)提交文件到本地代碼倉(cāng)庫(kù)
git tag -a '標(biāo)簽' -m "注釋" 打標(biāo)簽
git tag 查看標(biāo)簽
git tag -d '標(biāo)簽名稱' 刪除標(biāo)簽
//把本地倉(cāng)庫(kù)跟遠(yuǎn)程倉(cāng)庫(kù)關(guān)聯(lián)起來(lái)
git remote add origin 遠(yuǎn)程倉(cāng)庫(kù)地址 //origin也可該成別的名字,最好別改
git push origin master 上傳本地代碼到遠(yuǎn)程倉(cāng)庫(kù)master分支
注意權(quán)限問題:1、用戶名或密碼;2、生成公鑰私鑰:ssh-keygen
git tag 查看標(biāo)簽
git push --tags 上傳標(biāo)簽到遠(yuǎn)程倉(cāng)庫(kù)
git tag -d 標(biāo)簽名稱 刪除本地
git push origin :標(biāo)簽 從遠(yuǎn)程倉(cāng)庫(kù)刪除標(biāo)簽
第一次操作:
cd 進(jìn)入某個(gè)文件夾;
git init 初始化
拖入文件
git status 查看文件狀態(tài)
git add . 添加文件到暫緩區(qū)
git commit -m "注釋" 提交到master分支
git remote add origin 遠(yuǎn)程倉(cāng)庫(kù)地址
git remote //查詢遠(yuǎn)程倉(cāng)庫(kù)
git push origin master
Username for 'https://git.oschina.net': //詢問用戶名
Password for 'https://lovell@git.oschina.net': //詢問密碼
//打標(biāo)簽(這里的標(biāo)簽只是跟代碼產(chǎn)生關(guān)聯(lián),版本號(hào)太長(zhǎng)不好記 git log,相當(dāng)于給版本號(hào)起個(gè)別名)
git tag -a '標(biāo)簽' -m '打標(biāo)簽'
git tag //查看標(biāo)簽
git push --tags 上傳標(biāo)簽到遠(yuǎn)程倉(cāng)庫(kù)
后續(xù)修改了代碼提交:
git status
git add .
git commit -m '信息'
git push origin master
git tag '0.0.2'
git push --tags
3、其他操作:
3.1 刪除某個(gè)標(biāo)簽:
git tag -d '0.0.1' //本地刪除
git push origin :'0.0.1' //提交遠(yuǎn)程刪除
4、碰到的坑
1、如果是在github上創(chuàng)建的項(xiàng)目,并且用readme初始化。而本地又沒有readme文件,這個(gè)時(shí)候就會(huì)報(bào)錯(cuò)。
failed to push some refs to 'https://github.com/、、、/、、、.git',Updates were rejected because the remote contains work that you do not have locally.
解決:代碼合并:(pull=fetch+merge)
git pull --rebase origin master
5、注意
5.1 如果git push 403錯(cuò)誤,原因:是本地緩存了用戶名和密碼。
解決辦法是:重新設(shè)置用戶名和密碼
git remote set-url origin https://seemygo_wangshunzi@git.coding.net/seemygo_wangshunzi/test.git
其中seemygo_wangshunzi是用戶名。
5.2 其他成員怎么克隆代碼,怎么上傳代碼
克隆代碼:git pull origin master 或 git clone url.
上傳代碼:git push origin master
6、分支
Git鼓勵(lì)大量使用分支:
查看分支:git branch
創(chuàng)建分支:git branch <name>
切換分支:git checkout <name>
創(chuàng)建+切換分支:git checkout -b <name>
合并某分支到當(dāng)前分支:git merge <name>
刪除分支:git branch -d <name>
github上創(chuàng)建分支:
切換分支:git checkout -b dev(dev是分支名)
合并分支:先切換到master分支,再git merge develop
從github上拉取分支:git clone -b branch02 https://github.com/xxxx/xxxx.git
查看當(dāng)前分支:git branch -v 或 git branch
提交到分支:git push origin branch02
7、開發(fā)人員如何使用git進(jìn)行開發(fā)
- 克隆項(xiàng)目:
git clone url
- 查看分支情況:
git branch
(只有master分支) - 在本地創(chuàng)建分支并對(duì)應(yīng)到遠(yuǎn)程的分支,然后切換到本地branch01分支:
git checkout -b branch01 origin
(branch01是本地分支,origin是對(duì)應(yīng)到遠(yuǎn)程的分支,二者最好同名)(親測(cè),最后不寫遠(yuǎn)程倉(cāng)庫(kù)origin,最后也可以提交到branch01分支) - 查看分支情況:
git branch
(有master和branch01,并已經(jīng)切換到了branch01) - 提交分支到遠(yuǎn)程,這樣遠(yuǎn)程就有了一個(gè)分支:
git push origin branch01
- 在branch01下寫東西:
- 寫完后想丟棄:
git status
,git checkout -- README.md
- 寫好后想提交到遠(yuǎn)程分支,
git add .
,git commit -m'haha'
,git push origin branch01/master
- 寫完后想丟棄:
- 提交成功之后,合并代碼。
- 在github上合并,github上有提示:有分支提交。可以對(duì)比代碼,然后合并到master。
- 命令行合并代碼:
git checkout master
,git merge --no-ff branch03
然后在命令行中寫信息留言,按vi
,寫完esc
按shift+:
寫命令,wq
保存推出,git push origin master
。
- 切換到master分支并會(huì)自動(dòng)更新:
git checkout master
- 刪除本地分支:
git branch -d branch01
- 刪除遠(yuǎn)程分支:
git push origin --delete branch01
- 其他程序員拉取代碼:
git pull
疑問:
我在分支branch01中修改了readme.md,git status,顯示修改了readme.md,然后切換到master分支,git status,也顯示修改了readme.md。這我就感覺奇怪了,明明是在branch01分支中修改的東西,問什么在master分支也有呢?
答:1、因?yàn)閎ranch01分支修改東西后沒有add和commit到本地服務(wù)器,在切換分支時(shí),先提交東西到本地服務(wù)器。
2、如果branch01分支未完成的東西不方便提交,利用git stash進(jìn)行現(xiàn)場(chǎng)保留,然后切換。
3、如果沒有提交到本地服務(wù)器,不小心帶著為commit的工作切換了分支,那么,切換回去,進(jìn)行步驟1和步驟2.
4、如果帶過去了,又不小心add 和 commit了,可以用 git log 記錄commit id(復(fù)制下來(lái)),然后切回原來(lái)分支,使用 git cherry-pick [commit id]的方式,將另一分支的提交轉(zhuǎn)到當(dāng)前分支提交。失誤的同學(xué)可以了解一下 git cherry-pick 命令。
8、修改遠(yuǎn)程的URL
1、獲取遠(yuǎn)程url:git remote -v ;
2、修改url:git remote set-url origin https://github.com/xxxxxx/SpringBoot.git;
3、驗(yàn)證下:(當(dāng)前分支下,查詢遠(yuǎn)程地址)
git remote -v (列出 fetch 和 push 的url)
git remote get-url [--push] [--all] <name>
git remote get-url --all origin (return all URLs)
git remote get-url --push origin (query push URLs rather than fetch URLs)
9、從遠(yuǎn)程更新代碼到本地
fetch方法一、
- git fetch origin master //從遠(yuǎn)程的origin倉(cāng)庫(kù)的master分支下載代碼到本地的origin master
- git log -p master.. origin/master //比較本地的倉(cāng)庫(kù)和遠(yuǎn)程參考的區(qū)別
- git merge origin/master //把遠(yuǎn)程下載下來(lái)的代碼合并到本地倉(cāng)庫(kù)
fetch方法二、
- git fetch origin master:temp //從遠(yuǎn)程的origin倉(cāng)庫(kù)的master分支下載到本地并新建一個(gè)分支temp
- git diff temp//比較master分支和temp分支的不同
- git merge temp//合并temp分支到master分支
- git branch -d temp//刪除temp
pull方法二、(拉取并合并)
- git pull origin master
多用fetch,少用 pull 。因?yàn)樵趍erge前,我們可以查看更新情況,然后再?zèng)Q定是否合并
10、版本回滾、版本回退(未經(jīng)實(shí)際驗(yàn)證)
首先Git必須知道哪個(gè)版本,HEAD指向的版本就是當(dāng)前的版本,HEAD^表示上一個(gè)版本,HEAD^^表示上上個(gè)版本,HEAD~100表示往上100個(gè)版本。
查看過去的版本:git log
;
查看未來(lái)的版本: git reflog
;
--reset--
什時(shí)候用reset:沒有push到遠(yuǎn)程,還在本地,可能add,commit后,發(fā)現(xiàn)代碼有問題。
版本間穿梭(貌似刪除指定的commit):git reset --hard 79f673d631b08907496ce792f429e1f00da25b73
reset命令有3種方式:
1:git reset –mixed:此為默認(rèn)方式,不帶任何參數(shù)的git reset,即時(shí)這種方式,它回退到某個(gè)版本,只保留源碼,回退commit和index信息
2:git reset –soft:回退到某個(gè)版本,只回退了commit的信息,不會(huì)恢復(fù)到index file一級(jí)。如果還要提交,直接commit即可
3:git reset –hard:徹底回退到某個(gè)版本,本地的源碼也會(huì)變?yōu)樯弦粋€(gè)版本的內(nèi)容
--revert--
什么時(shí)候用revert:已經(jīng)push到遠(yuǎn)程,本地和遠(yuǎn)程都想回退到某個(gè)版本,線上線下都保持一致。
git revert:是用一個(gè)新的提交(commit,這里也是反向commit)來(lái)消除一個(gè)歷史提交做的修改;
git revert c011eb3c20ba6fb38cc94fe5a8dda366a3990c61
--reset和revert的異同:--
相同:
1、都是操作本地代碼倉(cāng)庫(kù),不會(huì)直接操作遠(yuǎn)程;
不同:
1、git reset :適用于沒有push到遠(yuǎn)程,是直接刪除本地倉(cāng)庫(kù)指定的commit來(lái)達(dá)到回滾效果,刪除之后HEAD是向后移動(dòng)了;
2、git revert:適用于已push到遠(yuǎn)程,通過新的一次commit(反向commit)來(lái)到本地倉(cāng)庫(kù)來(lái)達(dá)到回滾的效果,提交后HEAD一直是向前移動(dòng)的;
3、如果已經(jīng)push到遠(yuǎn)程,還用reset,刪除本地指定commit后再提交,可能會(huì)導(dǎo)致一堆沖突(revert不會(huì)),日后現(xiàn)有分支和歷史分支合并時(shí)候,reset恢復(fù)部分代碼依然會(huì)出現(xiàn)在歷史分支(但revert反向提交的commit不會(huì)出現(xiàn)在歷史分支)。
—— 參考文章
11、本地倉(cāng)庫(kù)的提交的歷史紀(jì)錄 和 遠(yuǎn)程倉(cāng)庫(kù)提交的歷史紀(jì)錄
1、本地提交歷史:git log ;
2、遠(yuǎn)程提交歷史:git log remotes/origin/master ;
可用于對(duì)于本地和遠(yuǎn)程的不同處。
其他:
查看分支歷史:
git log
git log --graph
git log --graph --pretty=oneline
git log --graph --pretty=oneline --abbrev
git log --graph --pretty=oneline --abbrev-commit
linux命令學(xué)習(xí)一 :touch和mkdir 創(chuàng)建文件和文件夾
1、創(chuàng)建文件: touch filename
2、創(chuàng)建文件夾:mkdir directoryname
可創(chuàng)建父文件夾或創(chuàng)建多個(gè)或創(chuàng)建多級(jí)文件夾 mkdir -p parentdir/directoryname
創(chuàng)建目錄同時(shí)復(fù)權(quán) mkdir -m 權(quán)限 directoryname