[英]How to commit the same commits after reverting, while preserving commit information?
假設我執行以下操作:
git init
touch initial && git add initial && git commit -m "Initial commit"
git checkout -b A
touch test_1 && git add . && git commit -m "Commiting test 1" NORMAL
touch test_2 && git add . && git commit -m "Commiting test 2" NORMAL
git checkout master
git merge --no-ff A
git revert -m 1 head
現在,在還原了那些提交之后,發生了一些變化,我決定我再次想要那些提交。
我不能再次進行git merge A
,因為這些提交已經在分支中。
我不想做git revert head
因為當有人運行git blame
,他們會看到Revert "Revert "Merge branch 'A'""
這不是特別有用。 所以我想保留原始提交的提交消息/正文。
我的技巧是在A
上運行git rebase並稍微修改第一次提交的消息,以便更新提交的哈希值,然后我可以再次合並,但是必須有一種更好的方法來完成同一件事。
您可以還原還原:
git revert <commit sha of the revert>
另一種選擇是選擇兩次提交之間的區別:
git cherry-pick master...dev
最后,您還可以將diff放入patch中,然后應用它:
git diff commit1 commit2 > some.patch
git apply some.patch
還原還原遠比在腳下突然改變而無需通過還原進行解釋要有用得多。
記得:
revert
保留提交信息,並有效地創建了一個反向修補程序,這就是Git看到合並分支並拒絕再次合並它的原因,直到還原了還原。
rebase
將刪除歷史記錄。 除非有必要,否則您不想刪除歷史記錄。
確實,通過一系列還原-還原操作是令人討厭的。
(更糟糕的是,在一次沖刺期間,我認為經過了一段代碼路徑,總共經歷了六個還原級別。幸運的是,該路徑位於不打算發布的分支上。)
默認情況下,還原記錄了它還原的提交的哈希ID,因此您可以簡單地顯式地挑選原始提交(也可以編輯消息以指出它在還原后將被重新導入)。 甚至可以通過提供-m
參數來完成合並,盡管這里偶爾會出現邊緣情況(因此請謹慎對待結果)。
另一種方法(更安全一些)還原合並的還原,但是然后編輯提交消息以放入更多信息。 您可以在git revert
命令中使用-e
/ --edit
(仍然是默認值),或者git commit --amend
revert-of-reversion提交,以使用改進的提交消息將其復制到新的和改進的提交中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.