【问题标题】:Pull requests overriding earlier commits拉取请求覆盖先前的提交
【发布时间】:2012-09-08 20:25:07
【问题描述】:

我是 Git 新手,所以请耐心等待。

我有一个 Git 存储库(在 GitHub 上),而且我有很多没有 Git 经验的程序员。当我雇用他们时,我会要求他们向我的存储库提出拉取请求,以便我可以在合并之前查看他们的更改。目前我最大的问题是,我经常在他们 fork 之后将更改合并到我的存储库中,但在他们提出拉取请求之前,这意味着合并他们的拉取请求会覆盖之前的提交。

除了告诉他们避免问题外,我有什么方法可以确保不会发生这种情况?

【问题讨论】:

  • 我看到你删除了接受的答案勾号。是否有任何其他信息可以添加到我的答案中?
  • @vonc 我真的在寻找避免整个问题的解决方案,而您的回答解释了导致它的原因以及问题出现后我应该做什么。

标签: git github merge pull-request


【解决方案1】:

确保不会发生这种情况的方法是拒绝任何无法以快进方式应用的提交。
但是没有什么能阻止用户在没有先更新他/她自己的 fork 的情况下提交拉取请求。

正确的拉取请求应该以快进的方式应用,这意味着贡献者应该首先将他/她的工作重新建立在目标仓库的最新提交之上(即 git pull --rebase),在提出拉取请求之前。

换句话说,他们应该首先将您合并的其他更改集成到他们自己的本地存储库中,测试他们的贡献是否仍然有效,拉取请求之前。
如果他们这样做,那么覆盖之前的提交不会有任何问题。
如果有,您只需拒绝拉取请求,要求贡献者首先对本地 repo 进行 rebase。

【讨论】:

    【解决方案2】:

    困难的方式:要求他们在合并之前创建一个(本地)分支。

    简单的方法:让我们忘记“如何避免问题”,告诉他们如何解决它。在 git 中,我们有 git reflog 可以回滚(几乎)任何更改。

    附:合并不会“覆盖”较早的提交。即使您没有 reflog,您也可以使用 git log ; git reset 来修复(大部分)问题。

    【讨论】:

    • 我的问题主要是我必须非常仔细地审查他们的提交,看看如果我自动合并他们的拉取请求,他们是否会丢失一些早期的提交。坦率地说,我对你的回答一无所知。但是我会查看您引用的命令(尤其是 reflog),看看当我对 Git 有更多了解时,是否能更好地理解您的答案。
    猜你喜欢
    • 2015-12-05
    • 2020-06-24
    • 2011-05-05
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多