Git 常用操作(4)- 更改提交
1. git reset —— 回溯歷史版本
-
回溯到創(chuàng)建feature-A 分支前
讓我們先回溯到上一節(jié)feature-A分支創(chuàng)建之前,創(chuàng)建一個(gè)名為fix-B 的特性分支。
要讓倉(cāng)庫(kù)的HEAD、暫存區(qū)、當(dāng)前工作樹回溯到指定狀態(tài),需要用到git rest --hard命令。只要提供目標(biāo)時(shí)間點(diǎn)的哈希值A(chǔ),就可以完全恢復(fù)至該時(shí)間點(diǎn)的狀態(tài)。
$ git reset --hard fd0cbf0d4a25f747230694d95cac1be72d33441d HEAD is now at fd0cbf0 Add index -
推進(jìn)至feature-A 分支合并后的狀態(tài)
git log命令只能查看以當(dāng)前狀態(tài)為終點(diǎn)的歷史日志。所以這里要使用git reflog命令,查看當(dāng)前倉(cāng)庫(kù)的操作日志。在日志中找出回溯歷史之前的哈希值,通過git reset --hard命令恢復(fù)到回溯歷史前的狀態(tài)。
首先執(zhí)行g(shù)it reflog 命令,查看當(dāng)前倉(cāng)庫(kù)執(zhí)行過的操作的日志。
$ git reflog4096d9e HEAD@{0}: commit: Fix Bfd0cbf0 HEAD@{1}: checkout: moving from master to fix-Bfd0cbf0 HEAD@{2}: reset: moving to fd0cbf0d4a25f747230694d95cac1be72d33441d83b0b94 HEAD@{3}: merge feature-A: Merge made by the 'recursive' strategy.fd0cbf0 HEAD@{4}: checkout: moving from feature-A to master8a6c8b9 HEAD@{5}: checkout: moving from master to feature-Afd0cbf0 HEAD@{6}: checkout: moving from feature-A to master8a6c8b9 HEAD@{7}: commit: Add feature-Afd0cbf0 HEAD@{8}: checkout: moving from master to feature-Afd0cbf0 HEAD@{9}: commit: Add index9f129ba HEAD@{10}: commit (initial): First commit從上面數(shù)第四行表示feature-A 特性分支合并后的狀態(tài),對(duì)應(yīng)哈希值為83b0b94A。我們將HEAD、暫存區(qū)、工作樹恢復(fù)到這個(gè)時(shí)間點(diǎn)的狀態(tài)。
$ git checkout master$ git reset --hard 83b0b94HEAD is now at 83b0b94 Merge branch 'feature-A'
2. 消除沖突
$ git merge --no-ff fix-BAuto-merging README.mdCONFLICT (content): Merge conflict in README.mdRecorded preimage for 'README.md'Automatic merge failed; fix conflicts and then commit the result.
系統(tǒng)告訴我們README 文件發(fā)生了沖突(Conflict)。系統(tǒng)在合并README文件時(shí),feature-A 分支更改的部分與本次想要合并的 fix-B 分支更改的部分發(fā)生了沖突。
-
查看沖突部分并將其解決
用編輯器打開README 文件,就會(huì)發(fā)現(xiàn)其內(nèi)容變成了下面這個(gè)樣子。
# Git教程 <<<<<<< HEAD - feature-A ======= - fix-B >>>>>>> fix-B======= 以上的部分是當(dāng)前 HEAD 的內(nèi)容,以下的部分是要合并的 fix-B 分支中的內(nèi)容。我們?cè)诰庉嬈髦袑⑵涓某上胍臉幼印?/p>
# Git教程 - feature-A - fix-B如上所示,本次修正讓feature-A 與fix-B 的內(nèi)容并存于文件之中。但是在實(shí)際的軟件開發(fā)中,往往需要?jiǎng)h除其中之一,所以各位在處理沖突時(shí),務(wù)必要仔細(xì)分析沖突部分的內(nèi)容后再行修改。
3. git commit --amend —— 修改提交信息
4. git rebase -i —— 壓縮歷史
總結(jié)
以上是生活随笔為你收集整理的Git 常用操作(4)- 更改提交的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Git 常用操作(3)- 本地分之显示、
- 下一篇: Git 常用操作(5)- git clo