借鑒于https://blog.csdn.net/u010629610/article/details/87335894
在拉取了E(字母代表一個(gè)提交對(duì)象)提交之后盒刚,我們忘記拉取最新的代碼就進(jìn)行了修改绿贞,這時(shí)候master分支上的提交已經(jīng)變成了A'
A local
/
D---E---A' master
(1)如果用commit進(jìn)行操作:本地就會(huì)產(chǎn)生一個(gè)A的提交對(duì)象,那么git pull的時(shí)候便需要把master分支合并到本地(可能需要解決沖突)贮聂,然后再提交
A local
/ \
D---E---A' master
合并后產(chǎn)生了一個(gè)M提交對(duì)象:
A---M local
/
D---E---A' master
最后git push提交到master分支上寨辩,則會(huì)產(chǎn)生兩個(gè)提交:
D---E---A'---A---M master
(2)使用git stash命令:本地就不會(huì)產(chǎn)生新的提交對(duì)象靡狞,而是把本地的更改先行緩存,那么git pull的時(shí)候便可以直接把本地的HEAD更新為A'
A' local
/
D---E---A' master
然后再使用git stash pop命令將本地的修改恢復(fù)(可能需要解決沖突)甘穿,這就相當(dāng)于我們?cè)贏'的基礎(chǔ)上進(jìn)行了修改梢杭,然后進(jìn)行g(shù)it commit產(chǎn)生了新的提交對(duì)象B
A'---B local
/
D---E---A' master
最后git push提交到master分支上,則只會(huì)產(chǎn)生一個(gè)提交:
D---E---A'---B master