我在一個非常基本的用例上使用 git revert ,以了解它的實際作業原理,但我面臨以下問題。我已經閱讀了幾篇關于類似情況的帖子,但在我看來,沒有一個給出明確的答案。我已經在網上沖浪,甚至只是表面上閱讀了有關 reset/revert 命令的部分 Git 檔案,但仍然無法弄清楚這里發生了什么。任何幫助表示贊賞。
這些是我正在執行的確切步驟,按以下順序:
- 創建一個
~/gittest目錄并在其中創建一個testfile檔案。 - 將以下行添加到
testfile:commit 1 - 執行
git add testfile; git commit -m 'commit 1' - 將以下行添加到
testfile:commit 2 - 執行
git add testfile; git commit -m 'commit 2' - 將以下行添加到
testfile:commit 3 - 執行
git add testfile; git commit -m 'commit 3'
此時我執行git log --oneline,這是輸出:
ba1810 (HEAD -> master) 提交 3
88bc443 提交 2
802d820 提交 1
現在testfile看起來像這樣:
提交 1
提交 2
提交 3
我想要完成的是恢復提交88bc443,因此期望說提交 2的行消失,所以testfile最終看起來像這樣:
提交 1
提交 3
在嘗試執行還原操作之前,我git status確實執行了我的作業樹是干凈的:
在分支主機上
沒有什么可提交的,作業樹干凈
因此,當我執行時git revert 88bc443,出現以下錯誤:
自動合并測驗
沖突(內容):合并測驗
錯誤中的沖突:無法恢復 88bc443... 提交 2
提示:解決沖突后,標記更正的路徑
提示:使用 'git add' 或 'git rm'
提示:和使用 'git commit' 提交結果
這些是tesfile錯誤提示后的 git 指示符:
提交 1
<<<<<<< HEAD
提交 2
提交 3
=======
>>>>>>> 88bc443 的父級 ... 提交 2
我根本沒有進行任何合并。以上是我在終端上執行的唯一指令。我已經閱讀了 revert 是如何在合并之后/之前在分支之間作業的,但我看不出在這種情況下沖突會存在哪里,因為沒有覆寫我試圖通過任何后續提交恢復的行。我正在處理單個檔案,甚至不在分支或遠程存盤庫之間。
Git 版本:2.25.1
作業系統:Linux Mint 20.2
uj5u.com熱心網友回復:
在內部,git revert 確實執行合并操作。
合并演算法需要三個版本的檔案:
甲堿版本; 那是提交后被還原的版本,即
commit 1 commit 2他們的版本;那是被還原的提交之前的版本,即
commit 1和我們的版本;這是進行還原提交的版本,即
commit 1 commit 2 commit 3
如您所見,在從base到theirs的過渡中,該行commit 2被洗掉了,但在從base到ours的過渡中,在 linecommit 3之后附加了一行commit 2。
盡管您可能認為 linecommit 3獨立于 line commit 2,但合并演算法的(作者)并不這么認為。相反,當相鄰行發生變化時,它被認為是一個值得注意的事件,因此這種情況被標記為沖突。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/405540.html
標籤:
