GIT指北(中篇)
四,時間穿梭
reset這個命令可以讓你在各個版本里自由跳轉(zhuǎn),不能單純的認(rèn)為是回退。
git reset branch_1^
git reset branch_1~2
git reset 5d3190e
1,reset:分支名后接^表示回退一檔,^^或~2回退兩檔,^^^或~3回退三檔,如果接具體的版本號就會直接跳轉(zhuǎn)。
2,接--mixed:默認(rèn)參數(shù),保留所有改動,但清空stage緩沖區(qū)
3,接--soft:保留所有改動,并保留stage緩沖區(qū)。
4,接--hard:所有文件會還原到對應(yīng)版本。我比較常用的模式!
了解了reset之后,再引入一個新的命令revert,revert和reset的區(qū)別在于,revert不是直接跳轉(zhuǎn),而是在不影響之前的版本的情況下新建一個commit,把要跳轉(zhuǎn)的版本內(nèi)容還原過來,但這時候比較容易出現(xiàn)沖突,解決完沖突再重新commit即可。
五,再談?wù)労喜?/p>
合并有兩種方案,merge與rebase。在沒有沖突的情況下,兩者功能類似。但在有沖突時會有比較大的分別,下面我分別解釋一下。
假設(shè)有A,B兩個分支,當(dāng)前分支是B,要將A的內(nèi)容合并到B。
merge:有記錄可溯源。碰到?jīng)_突的話,會將所有沖突點寫入沖突的文件中,手動或通過工具修改完成后,再重新commit即可。
rebase:無記錄,直接合并。遇到?jīng)_突時會開一個臨時分支C,將需要修改的文件放在里面,在修改完成后,通過rebase --continue合并到B分支,并刪除臨時分支C。如果使用rebase?--abort可以舍棄本次合并,B還是原來的B。如果使用rebase --skip則會舍棄B分支的所有改動,變成和A分支一樣的內(nèi)容。