【问题标题】:Gerrit cherry pick格里特樱桃采摘
【发布时间】:2014-02-21 15:43:28
【问题描述】:

我有一个问题,当我从 gerrit 中挑选一个提交,进行更改等时。我想在樱桃挑选之前用 --amend 将它们提交回我的提交,我该怎么做? 现在我刚刚添加 -A 所有文件,但是我不知道下一步该怎么做

【问题讨论】:

  • 你真的是指审查/更改而不是“从 gerrit 提交”和获取/结帐而不是樱桃挑选吗?
  • cherry pick 提交是来自 Gerrit 的补丁集?

标签: git gerrit


【解决方案1】:

只有最新的提交才可以修改。假设您要修改的提交被称为(具有 SHA-1 代码)111。您可以在git log 中查看您提交的真实 SHA-1 代码。

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

我假设您已经对某些文件进行了本地未提交的更改,并且您希望将这些更改应用于提交 111。您必须隐藏这些更改,因为 git reset --hard will 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 已使用 Gerrit 进行了修改和更新。

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

【讨论】:

    【解决方案2】:

    您的案例中的 Gerrit 工作流程是:

    • 使用评论页面中的 URL 从 Gerrit 获取更改
    • 进行更改
    • 使用git add -A . 将更改添加到索引
    • git commit --amend 修改之前的提交
    • 将修改后的提交推送回 Gerrit git push gerrit master:refs/for/master(将 master 替换为您的和远程分支名称)

    【讨论】:

    • 我已经对它们进行了一些更改,然后我选择了其他提交,进行了另一项更改,现在我希望它们在我的cherrypick之前的第一次提交中被推送,现在当我正在修改时不幸的是,樱桃选择了提交
    • 您可以使用交互式变基 (git rebase -i HEAD~3) 来实现。然后在您要修改的提交前将pick 替换为e。修改完成后,发出git rebase --continue完成操作。
    【解决方案3】:

    我建议使用 checkout 而不是从 Gerrit 挑选变更/补丁集。 Whit checkout 提交不会取决于。在您的情况下,修改最后一次修改将影响最后一次提交,即樱桃选择 - 这是正常的。但是如果你想修改 1.commit 上的更改,那么只需先删除 cherry pick commmit 即可。

    【讨论】:

      猜你喜欢
      • 2012-12-07
      • 1970-01-01
      • 2011-03-02
      • 1970-01-01
      • 2017-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      相关资源
      最近更新 更多