git學(xué)習(xí)記錄(三)——多人合作操作

隨著對(duì)git不斷使用,逐步進(jìn)行學(xué)習(xí)和理解,現(xiàn)把學(xué)習(xí)整理成一系列基礎(chǔ)內(nèi)容,供大家參考和討論。本篇介紹下使用git多人合作的操作,主要包括:

  • 拉取和同步
  • 回滾和撤銷(xiāo)
  • 代碼合并
  • 其他

一、拉取變更

  1. 從遠(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ù)代碼)
  2. 從緩存(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)容一致

3.合并分支常常出現(xiàn)沖突(相同文件合并分支內(nèi)容不一致),eg:

查看沖突文件new.file,
上圖沖突部分:
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

1)展示所有的提交信息

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容