
隨著對(duì)git不斷使用,逐步進(jìn)行學(xué)習(xí)和理解,現(xiàn)把學(xué)習(xí)整理成一系列基礎(chǔ)內(nèi)容,供大家參考和討論。本篇介紹下使用git多人合作的操作,主要包括:
- 拉取和同步
- 回滾和撤銷(xiāo)
- 代碼合并
- 其他
一、拉取變更
-
從遠(yuǎn)程倉(cāng)庫(kù)拉取,有兩種方式:
1)git fetch- 從遠(yuǎn)程倉(cāng)庫(kù),下載到本地倉(cāng)庫(kù)
- 需再使用git merge [alias]/[branch],將遠(yuǎn)程倉(cāng)庫(kù)的代碼與工作目錄進(jìn)行合并
2)git pull
- 是git fetch和git merge合并操作
- 從遠(yuǎn)程倉(cāng)庫(kù)拉取到本地工作目錄
- 每次提交代碼或合并代碼時(shí)候,先git pull下,然后再其他操作(防止本地代碼覆蓋遠(yuǎn)程庫(kù)代碼)
從緩存(index)拉取覆蓋工作目錄
-
git checkout [branchName],切換分支,將HEAD指向分支,更新工作目錄,并將切換之前工作目錄修改內(nèi)容同步更新
1、若工作目錄與緩存(index)有文件沖突,不能切換成功
2、上圖中g(shù)it checkout -b testCheck ,是git branch testCheck和git checkout testCheck的簡(jiǎn)寫(xiě),新建并且切換到testCheck分支
- git checkout -- [fileName] ,將緩存(index)的某文件內(nèi)容覆蓋到工作目錄
(ps:“--”為防止本地新建的文件和分支名重名) - git checkout . 將緩存(index)的所有文件內(nèi)容覆蓋到工作目錄
git-checkout ,官方定義:Switch branches or restore working tree files, 即,用于切換分支和回復(fù)工作樹(shù)文件
1)當(dāng)進(jìn)行文件覆蓋時(shí)候要小心操作
2)git checkout [非文件名,非分支],就會(huì)新建一個(gè)匿名分支,若切換到其他分支,之后不能對(duì)這個(gè)匿名分支操作
二、撤銷(xiāo)和回滾
在工作中主要涉及下面四種情況需要撤銷(xiāo)(上傳到遠(yuǎn)程服務(wù)器后則是回滾操作):
1、在工作目錄修改了,沒(méi)有進(jìn)行g(shù)it add操作(見(jiàn)git checkout操作)
- 對(duì)某一文件撤銷(xiāo):git checkout -- [fileName] 可進(jìn)行工作目錄的文件進(jìn)行撤銷(xiāo)
- 對(duì)所有內(nèi)容撤銷(xiāo):git checkout .
2、對(duì)文件操作,進(jìn)行g(shù)it add操作,沒(méi)有進(jìn)行g(shù)it commit 操作
- 對(duì)某一文件撤銷(xiāo):
1)先撤銷(xiāo)暫存:git reset HEAD [fileName]
2)如要撤銷(xiāo)修改:git checkout -- [fileName] - 對(duì)所有內(nèi)容撤銷(xiāo):
1)先撤銷(xiāo)暫存:git reset HEAD
2)如要撤銷(xiāo)修改:git checkout .
3、進(jìn)行g(shù)it commit操作,沒(méi)有進(jìn)行g(shù)it push操作
1)撤銷(xiāo)到上一次commit:git revert HEAD
2)撤銷(xiāo)到某一次commit:
- git revert操作:git revert HEAD~N(n為想要撤銷(xiāo)到n+1次前狀態(tài)),或git revert commitID
- git reset操作:git reset [--soft | --mixed | --hard ] [提交唯一表識(shí)]
--soft,是后退了git commit的操作,工作目錄和緩存區(qū)(git add添加)的內(nèi)容無(wú)變化
--mixed,默認(rèn)模式,后退了commit和add的操作(緩存區(qū)),工作目錄不變化
--hard,慎重使用,后將工作目錄,add添加緩存區(qū)和commit的內(nèi)容全部回退
4、進(jìn)行了git push操作后,回滾
此場(chǎng)景下,主要是需要回退到上次commit或某次commit,再進(jìn)行push,完成回滾操作
1)git checkout <tag>,tag為更新到遠(yuǎn)程倉(cāng)庫(kù)時(shí)打tag
2)git checkout <commitID> <fileName>,commitID可通過(guò)git log <fileName>獲取到對(duì)應(yīng)
3)git reset --hard HEAD^
4)git revert HEAD/git revert commitID
5)git rebase -i "commit id",表示前一次
之后,再運(yùn)行g(shù)it push origin master -f,強(qiáng)制把本地代碼上傳覆蓋遠(yuǎn)程
三、代碼合并
1.先切換到一個(gè)分支上,eg:git checkout <branchName>
2.合并代碼
- git merge [branchname2] 將branchname2合并到所在分支
1、可以同時(shí)合并多個(gè)分支,eg:git merge branchName1 branchName2 ,合并兩分支到所在分支
2、git pull是git fetch和git merge的操作,也屬于合并操作
- 操作之前工作目錄內(nèi)容和本地倉(cāng)庫(kù)(local repositoty)內(nèi)容一致


1)<<<<<<< HEAD到=======是當(dāng)前分支內(nèi)容
2)從=======到>>>>>>> master是要合并的master分支內(nèi)容
4.解決沖突
1)對(duì)沖突部分,手動(dòng)調(diào)整合并
2)再次進(jìn)行g(shù)it add和git commit操作
3)在合并主干代碼時(shí),建議先git pull下最新的代碼,解決沖突,再提交
四、其他
1、 reset和revert區(qū)別
- reset刪除commit,HEAD是向后移動(dòng)了,revert是向前移動(dòng)
- reset 會(huì)把歷史提交內(nèi)容給刪除,不安全操作,可在私有分支上操作,公共分支不建議做
- revert 撤銷(xiāo)一個(gè)提交時(shí),會(huì)重新創(chuàng)建一個(gè)新的提交,工作目錄內(nèi)容不會(huì)變化,會(huì)在歷史中查看所有的操作,可在公共分支上操作
reset刪除commit,若已push,會(huì)涉及修改提交歷史與origin有沖突,必須強(qiáng)制覆蓋提交,需要使用git push -f
2、git log

2)其他參數(shù)
-
git log --oneline ,一行內(nèi)顯示commitID和commit信息
-
git log -p ,展示詳細(xì)的提交內(nèi)容的diff信息
-
git log --stat,展示文件的增減數(shù)量
-
git log -- <fileName>,展示某個(gè)文件的提交紀(jì)錄
git log -- author="<autohor>",展示某個(gè)提交人的紀(jì)錄
git log -n ,展示最近n條提交紀(jì)錄
其他可查看git log介紹
3、git tag
1)對(duì)某一個(gè)發(fā)布版本打標(biāo)簽,包含兩種類(lèi)型,輕量級(jí)標(biāo)簽和含附注的標(biāo)簽
2)輕量級(jí)標(biāo)簽像不會(huì)變化的分支,指向特定提交對(duì)象的應(yīng)用,可以用于撤銷(xiāo)和回滾操作
3)含附注標(biāo)簽,可查看git tag介紹
4)常用命令:
- git tag 可查看現(xiàn)有的tag
- git tag -a tagName,新建tag,eg:git tag -a v1.0.1
- git show tagName,查看tag標(biāo)簽的相應(yīng)的版本,提交信息等
參考資料:
https://git-scm.com/docs
https://blog.csdn.net/f45056231p/article/details/82081553
https://blog.csdn.net/ligang2585116/article/details/71094887




