2014-02-21 61 views
0

我有一个问题,当我樱桃从gerrit挑选一个提交,做出改变等。我想提交他们回来 - 在我做这个樱桃之前,我怎么能做到这一点? 现在,我刚才添加-A的所有文件,但是我不知道下一步该怎么做Gerrit樱桃挑

+0

你实际上是否意味着评论/改变,而不是“从gerrit提交”和取/结账而不是樱桃选择? –

+0

樱桃挑选提交是来自Gerrit的补丁集? – HiB

回答

1

修改仅适用于最新的提交。我们假设您要修改的提交被称为(具有SHA-1代码)111。您可以在git log中看到您提交的真实SHA-1代码。

您可以使用git reset --hard使您的本地分支指向要修改的提交。请注意,对于没有Gerrit的“普通”git,这将是一个非常糟糕的主意,因为您通过修改已推送的提交来重写历史记录!

我假设你已经有一些本地的,未提交的某些文件的更改,并且你想将这些更改应用到提交111。您必须保留这些更改,因为git reset --hardwill remove them and it couldn't be undone

所以,你必须做(与你在一个分支的名称替换master):

git stash save 
git reset --hard 111 
git stash apply 
<do some more changes to commit 111 if needed> 
git commit --amend 
git push gerrit master:refs/for/master 

瞧 - 你的提交111进行了修订,并与格里特更新。

还有另一种方法可以做到这一点 - 您可以使用git rebase --interactive,但在这种情况下,我发现它比git reset更复杂。

+0

非常感谢你,那正是我正在寻找的 – user3274539

1

的格里特的工作流程,你的情况是:

  • 使用URL从检讨获取从格里特的变化页面
  • 进行更改
  • 到指数的变化添加与git add -A .
  • 修改以前犯了git commit --amend
  • 修订推回提交到格里特git push gerrit master:refs/for/master(更换master你和远程分支名称)
+0

我做了一些改变,提交了他们,然后我樱桃Picked其他提交,做了另一个修改,现在我希望他们被推在我的樱桃选择之前的第一次提交,现在当我正在修改我在那个樱桃选择提交不幸 – user3274539

+0

你可以通过交互式rebase('git rebase -i HEAD〜3')来完成。然后在你想修改的提交前用'e'替换'pick'。完成修改后,发出'git rebase --continue'完成操作。 –

0

我建议使用checkout而不是挑樱桃从格里特的改变/补丁集。惠特检查提交不会取决于。在你的情况下,修改最后修改会影响最后一次提交,这是樱桃选择 - 这是正常的。但是如果您想要修改1. commit中的更改,则只需首先删除樱桃选择通知。