2012-08-14 95 views
1

我有以下的变化历史在我的git仓库:git的变基删除提交

---X---Y---Z---A---B---C 

我开始从代码Z的基础工作,进行了三次修改A,B和C的每个变化已经作为对Gerrit的单独评论上传,并且每个都取决于之前的更改。

经审查后我想删除改变,让我的更改历史记录是:

---X---Y---Z---B---C 

什么是git rebase -igit commit正确的流程得到这个工作?

我假设如下:

  1. 使用git rebase -i HEAD~3显示最后三个提交。这显示该文件的内容:

    pick 1234567 Commit A message
    pick 1a2b3c4 Commit B message
    pick abcdefg Commit C message

  2. 我可以删除第一行并保存文件,删除第一次提交。

  3. 这是我卡住...如果我尝试git commit --amend我只能修改C的犯我这样不知道如何使用repo upload .git push

  4. 我的底垫中更改按键格里特审查

我正在使用Gerrit 2.2,因此在审阅页面上没有重新布局按钮。

+2

没有第3步。你完成了...... – 2012-08-14 14:35:47

+0

编辑了第3步,使问题更清楚。基本上,我怎么把rebase change或者B和C推到Gerrit。 – Markus 2012-08-14 14:38:05

回答

2

以下步骤现在已经为我工作:

  1. 使用git变基-i HEAD〜3显示最后三个提交。这显示该文件的内容:

    pick 1234567 Commit A message
    pick 1a2b3c4 Commit B message
    pick abcdefg Commit C message

  2. 我可以删除第一行并保存文件,删除第一次提交。

  3. git log现在显示我的B和C的变化Z的基后,与他们的新SHA-1值

  4. 我然后可以单独地推到它们各自的评价每个变化:

    git push ssh://myserver:29418/project SHA1_of_B:ref/changes/123
    git push ssh://myserver:29418/project SHA1_of_C:ref/changes/789

123789是审查编号分别改变B和C.我的B和C更改每个都有新的补丁,适当地重新发布。

原来我的问题只是理解,我不得不git push两个单独更改。

+0

有几个星期前登录过两个'markus'用户? – eckes 2012-08-14 14:59:03

0

步骤2)之后,您已完成重新绑定。选择后承诺挑选。您可能会遇到合并冲突。修正他们与git mergetool并做一个git rebase --continue

编辑:因为重新确实会改变历史。我不知道gerrit会如何对此作出反应。您可以尝试添加强制标记,例如git push -f,但请记住,由于历史的变化,这是很危险的!

+0

如何将这些更改推送给B和C的Gerrit进行检查? – Markus 2012-08-14 14:40:42