Git保留最新提交,但删除之前的提交
我想把最新的Git提交给gerrit。 但不知何故,我收到一条错误消息,说我无法推送,因为两个提交具有相同的Change-ID 在下图中,您可以看到当前的情况Git保留最新提交,但删除之前的提交,git,gerrit,git-commit,Git,Gerrit,Git Commit,我想把最新的Git提交给gerrit。 但不知何故,我收到一条错误消息,说我无法推送,因为两个提交具有相同的Change-ID 在下图中,您可以看到当前的情况 第三次提交(从顶部)已推送到gerrit 第三次提交和第二次提交以某种方式具有相同的Change-ID 我想把第一个承诺推给gerrit 所以我解决这个问题的想法是删除第二次提交。 这可能吗?假设从上到下的三次提交的提交哈希是A、B和C 确保git状态显示它是干净的。如果没有,请先运行git stash 如果你真的不想要B了 git
这可能吗?假设从上到下的三次提交的提交哈希是A、B和C 确保
git状态
显示它是干净的。如果没有,请先运行git stash
如果你真的不想要B了
git reset C --hard
git cherry-pick A
如果你还想要B
git reset B --hard
git commit --amend
# Edit the commit message and delete the change-id line, save and exit.
# The commit-msg hook will generate a new changeid.
git cherry-pick A
然后再按一下。你说的“相同的更改id”是什么意思?你是说提交的散列吗?40个字符的十六进制字符串,或者其他什么?每个git提交都有一个提交id(40个字符的十六进制字符串)。我说的是变更id(也是一个40个字符的十六进制字符串)。更改id添加在提交消息的末尾,gerrit使用它来组织不同的提交。@LasseVågsætherKarlsen:“更改id”是gerrit ism。我自己没有使用Gerrit,我不能告诉你是什么产生了它,但它在Git之外。太好了,这就是我一直在寻找的。还有一个问题:假设我做了第一个程序,B就不在了,对吗?B的变化会发生什么?它们是否也将被删除,或将被附加到A或C?@npkllr B,其更改不再在当前分支中,尽管它们仍在本地存储库中。如果任何引用都无法访问B,则在git的GC清除之前,它们都可以访问。在此之前,您可以像使用任何其他哈希一样使用B哈希,因此
git show B
,git checkout B
等都可以使用。当B被删除时,您将看到fatal:bad object B
错误消息。reset
然后是cherry pick
工作,但它可能更容易使用rebase-i
@williampersell同意。但是我总是发现解释如何使用git-rebase-I
更加困难。