修改后的提交恢复到以前的提交

Amended commits revert to previous commit

我有一个主分支的回购协议。我在一次提交中修改了补丁集 1 到 10。现在我已经修改了该提交中的第 11 个补丁集并将代码推送到 gerrit 中。我想将提交还原为第 10 次提交并推送。我如何恢复,就像我看到 git 日志一样,它没有列出该补丁集中的提交。但它宁愿把它当作一个单一的提交。

我已经解释了下面的操作顺序。

Sequence of actions
1. Initially for patch-set #1 
git clone repo
made changes to code 
git commit 
git push HEAD:refs/for/master => pushes to gerrit
Let us assume gerrit patch# generated is 12345

2. mkdir new_dir
git clone repo
git checkout ssh:user@gerrit1.xxx.com/development refs/changes/1/12345/1 && git checkout FETCH_HEAD
made modifications for patch-set 2 on patch-set 1
git commit --amend
git push HEAD:refs/for/master => pushes to gerrit 

Now gerrit patch#12345 has following commits/patch-sets
1, 2

3. Repeated step 2 for patch-sets 3 to 11
Now gerrit patch#12345 has following commits/patch-sets
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11

4. Got to know path-set 11 is redundant, has to be reverted, so that patch-set#10 is the latest and 11 should be discarded, so that gerrit patch#12345 has commits/patch-sets 1, 2, 3, 4, 5, 6, 7, 8, 9, and 10 only (not 11).


How do I achieve step 4?

当我尝试 git rebase -i 与 commit-id 时它说致命的坏对象。

请告诉我如何使用 git 命令解决这个问题,或者我应该手动解决这个问题。

谢谢。

答案就在你的问题中。您无需签出补丁集 1,只需取回补丁集 10。

git checkout ssh:user@gerrit1.xxx.com/development refs/changes/1/12345/10 && git checkout FETCH_HEAD
git commit --amend
git push HEAD:refs/for/master

您需要修改补丁集 10 才能再次推送它,因为 Gerrit 不允许您重新推送相同的补丁集,之后您可以提交补丁集 11。

或者您可以检查您的 reflog 并在其中找到补丁集 11。但最简单的方法是从 Gerrit 下载命令

获取命令