2017-03-08 92 views
2

我想刪除較舊的提交,因爲我必須將它分離爲2個提交。 因此,在a5b4cd處的更改與2a0d40e + a8bb836中的更改相同。Git - 刪除較舊的提交,它的更改從未發生

2a0d40e Add sending 
a8bb836 Add parsing 
a5b4cbd Add sending and parsing  <--- I want to delete this 
f6063ac First commit 

我嘗試了一些git rebase -ifixup這裏,但每次,它會增加從這個變化「已刪除」承諾的另一個承諾,而我不想。

+0

可能的複製[刪除本地完全從樹承諾(http://stackoverflow.com/questions/27984814/remove-local-commit-completely-from-tree) – thirtythreeforty

回答

2

不要使用fixup。只需在interactive rebase期間刪除該行。

這將足以讓該提交被刪除。

但是,然後準備不得不強制推動(git push --force),這可能會在公共分支上存在問題。

另一種選擇是git revert(如果你只是想取消承諾,而不是從歷史中完全移除)

之前基礎重建時,我想將它們分開我Commit2與文件3和文件4。然後我想分開它,所以我刪除了File4,添加了Commit3(只是使用File1和File3),然後添加了File4並使Commit4成爲可能。

然後將溶液不同的是:雖然在提交4(所有文件),做的

git reset --soft Commit1 
git add File3 
git commit -m "Add File3" 
git add File4 
git commit -m "Add File4" 
+0

我嘗試刪除行,但我得到:'先前的櫻桃選擇現在是空的,可能是由於解決衝突。和「無法應用a8bb836 ...添加解析」。 – Mildas

+0

@Mildas你使用的是什麼git版本? (因爲這是之前討論過的:http://git.661346.n2.nabble.com/odd-behavior-with-git-rebase-td7399607.html) – VonC

+0

@Mildas考慮http://stackoverflow.com/a/29638001/6309,你可以嘗試下降,也可以下降a8bb836,並看看最終結果是否仍然是你想要的。 – VonC