很明显,但我找不到方法。每个手册都描述了在现有分支的顶部重新安置或简单的交互式重新安置等方法。假设我有一个类似于钻石形状的git历史记录,如下:
* 949430f Merge commit (D) (HEAD, mybranch)
|\
| * e6a2e8b (C)
* | 3e653ff (B)
|/
* 9c3641f Base commit (A)
我希望您能够记录历史,例如:
我想要实现以下历史记录:
* 949430f Combined commit (BCD)
|
* 9c3641f Base commit (A)
提交 B 和 C 可能会被合并或丢弃,都无所谓,我只想保留结果。而且我不想因为解决冲突而回滚提交。
以下是我尝试过的方法:
1)简单地压缩 B 和 C 是无法实现的。
git rebase -i HEAD~2
...
p 3e653ff (B)
f e6a2e8b (C)
...
Could not apply a91f3a4
好的,这有些可以理解,存在一些冲突。
2) 我无法通过压缩来实现那个目标。
git rebase -i -p HEAD~3
...
pick 9c3641f Base commit (A)
f 3e653ff (B)
f e6a2e8b (C)
pick 949430f Merge commit (D)
...
error: unable to match a91f3a4...
3) 我甚至无法放弃B和C。
git rebase -i -p -m HEAD~3
...
pick 9c3641f Base commit (A)
#pick 3e653ff (B)
#pick e6a2e8b (C)
pick 949430f Merge commit (D)
...
error: Commit 949430f is merged but option -m is not set.
fatal: cherry-pick failed
Could not pick 4f3e6231b5cecf57434613ca3afd2a21ba375eb9
为什么?这里有选项“-m”...
有谁知道如何解决这个问题吗?
git reset --soft commitA; git add .; git commit -m "Combined commit"
。 - aragaergit add
:软重置会保留索引不变。(我假设你在分支的顶端,在提交D
上。请记住,Git 存储文件而不是增量;如果你在提交D
上并将其放入索引中,则这些是最新的文件。) - torekgit add .
也不会有什么问题(除非有一些杂乱无章的文件被添加进来,但是假设你在这个时候已经设置好了.gitignore
文件...)。 - torekgit clean -qdf
。 - aragaer