簡體   English   中英

如何取消合並 git 中先前合並的提交?

[英]How to unmerge a previously merged commit in git?

最初我有這個:

> git log --oneline
a807e4a (HEAD -> master) Add test
.
.
.
4a92648 Improve xyz file
f81cae4 Edit xyz file
.
.
.
7cbf3ec Add gitignore

然后我在玩 git,做了一些變基。 現在,當我登錄時,我得到了這個:

> git log --oneline
547748a (HEAD -> master) Add test
.
.
.
ed9f256 Edit xyz file
.
.
.
7cbf3ec Add gitignore

如您所見,那里的一個提交意外地與它下面的提交合並了。 它被忽視了,我現在注意到了。 當我重新登錄時,我能夠找到丟失的提交的 hash(我猜它是正確的)。 但我不知道如何恢復它。

如果我執行git reset --merge 4a92648那么它將 go 到該提交,但我失去了在那之后所做的更改。 有人可以幫我取回該提交,而不會丟失我之后所做的更改,請注意。 這些更改僅在我的本地計算機中,我還沒有推送它們。

首先,在試驗時創建一個臨時分支,在這種情況下你可以這樣做:

git checkout -b temp_branch

假設您已經在要更改的分支上。

在那之后,鑒於您已經擁有所需的提交哈希,為什么不運行git rebase -i呢? 您可以添加新行(並刪除它們),而不僅僅是更改當前行。 例如,如果您需要恢復丟失的提交,請運行:

git rebase -i ed9f256^

編輯器將打開並顯示您在第一行pick ed9f256... 將該行替換為:

pick f81cae4 Edit xyz file
pick 4a92648 Improve xyz file

這樣,您也可以保留新應用的更改。 最后,如果您認為master應該反映重新設置的temp_branch ,請運行:

git branch -f master temp_branch

更新master分支。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM