一、從遠(yuǎn)程倉(cāng)庫(kù)拉取代碼
在多人協(xié)作項(xiàng)目中,很多時(shí)候我們需要從遠(yuǎn)程倉(cāng)庫(kù)中拉取別人的代碼馒吴,以確保本地倉(cāng)庫(kù)的代碼是最新的。
方法一
git status
git add .
git commit -m <commit message>
git pull
// 解決沖突
git add .
git commit -m <commit message>
git push
方法二
git status
git stash
git pull
git stash pop
// 解決沖突
git add .
git commit -m <commit message>
git push
二瑟曲、合并分支
在復(fù)雜的項(xiàng)目中饮戳,很多人可能在同一個(gè)repo上工作,這個(gè)時(shí)候每個(gè)人可能都會(huì)從master分支上創(chuàng)建一個(gè)新的分支洞拨,并在自己的分支上工作扯罐。
場(chǎng)景一
假使A從master上創(chuàng)建了一個(gè)新分支feature-1
,同時(shí)B也從master上創(chuàng)建了一個(gè)新分支feature-2
烦衣,倆人分別在各自分支上提交了commit歹河,此時(shí),A和B都想將代碼合并到master上花吟。
方法一
// A
git switch master
git merge feature-1
// B
git switch master
git pull
<conflit resolving>
git merge feature-2
方法二
// A
git switch master
git rebase feature-1
// B
場(chǎng)景二
A在feature-1
分支上作出修改秸歧,B從feature-1
的基礎(chǔ)上拉出了一個(gè)新分支feature-2
,并在新分支上開(kāi)發(fā)提交衅澈。這個(gè)時(shí)候键菱,B只能等A的代碼merge到master之后,才能將自己的代碼merge到master今布。
將feature-1
merge到master
// at master branch
git rebase feature-1
// conflict resolving
git add.
git rebase --continue
git push -f
將feature-2
merge到master
// at master branch
git rebase feature-2
// conflict resolving
git add.
git rebase --continue
git push -f
此時(shí)经备,git的提交記錄就會(huì)變成一條漂亮的直線(xiàn)了。
三部默、修改歷史提交記錄
場(chǎng)景一
A在凌晨四點(diǎn)終于寫(xiě)完的最后一行代碼侵蒙,開(kāi)心的提交了一個(gè)commit,提交完之后定睛一看傅蹂,提交記錄上寫(xiě)著不可描述十分真實(shí)但是可能會(huì)讓客戶(hù)一百分不開(kāi)心的心理活動(dòng)纷闺,A倒吸一口冷氣,幸好發(fā)現(xiàn)的早。
git commit --amend
修改完之后用:wq保存編輯急但,上一次的commit就被修改了澎媒。
場(chǎng)景二
當(dāng)A修改完最后一次提交之后,長(zhǎng)出一口氣波桩,緩緩打出了一個(gè)git log
來(lái)查看自己的修改是否成功戒努。誰(shuí)承想A的那些不可描述十分真實(shí)但是可能會(huì)讓客戶(hù)一百分不開(kāi)心的心理活動(dòng)在A(yíng)的倒數(shù)第三次提交中也被寫(xiě)出來(lái)了。
git rebase -i HEAD~3
屏幕上此時(shí)會(huì)顯示圖一這樣的記錄镐躲,注意此時(shí)的提交記錄排序是從倒數(shù)第三次到倒數(shù)第一次储玫,也就是按照時(shí)間正序排序的。
此時(shí)萤皂,我們需要修改862fe4a的commit message撒穷,因此我們將862fe4a前面的pick改成edit,保存并退出之后裆熙,git會(huì)像圖二一樣提示我們端礼。
這個(gè)時(shí)候我們就按照提示用
git commit --amend
修改commit message,之后git會(huì)帶我們到下一個(gè)提交入录,這個(gè)時(shí)候我們用git rebase --continue
跳過(guò)就可以了蛤奥。