【问题标题】:Doing rebase adds replays master branch commits into my Pull Request执行 rebase 会将主分支提交重播到我的拉取请求中
【发布时间】:2016-10-09 00:33:13
【问题描述】:

我有一个拉取请求here,当我执行“git rebase”时,它添加了我没有在拉取请求中创作的提交。我正在合并的远程 branch 领先于所有这些提交,所以我不明白他们为什么要进入 PR。知道如何撤消此操作,或将来如何防止此操作吗?

这就是我所做的

# Checkout local branch and apply changes
mkdir /home/yaroslavvb/tfimmediate_fresh
cd /home/yaroslavvb/tfimmediate_fresh
git clone https://github.com/yaroslavvb/tensorflow.git
cd tensorflow
git checkout tfimmediate_fresh
# do my modifications
git commit -m "Changes"

# Rebase against main branch
git remote add tfmain https://github.com/tensorflow/tensorflow.git
git fetch tfmain
git rebase tfmain/master

# fix conflicts
git add tensorflow/contrib/__init__.py
git rebase --continue
git pull
# fix conflicts again
git add tensorflow/contrib/__init__.py
git commit -m "Fix merge conflicts"
git push
git push -f

在此之后,我的拉取请求包含我未创作的主分支中的更改

【问题讨论】:

    标签: git github git-pull


    【解决方案1】:

    在变基时,您在 git rebase --continue 之后执行了 git pull

    这会将来自 origin/master 分支的新提交与您的本地分支合并,因此将合并的提交包含在您的拉取请求中。

    在变基之后,您应该将更改推送到您将用于拉取请求的分支。

    【讨论】:

      【解决方案2】:

      每次我变基时都欢迎来到我的生活。希望我们将来都可以通过听 Olivier 而不是拉扯来避免这种情况。 ?

      但是,好吧,你已经这样做了,现在你一团糟。做什么?我过去只是创建一个新分支,复制我的更改,然后做一个新的 PR,但我们不必这样生活。您可以删除提交。

      git log 会给你一个提交列表。然后,您可以使用以下方法获取 SHA 并删除单个提交:

      git rebase -p --onto 4196caae8735bb983a2a0bace6f72b0820a755c1^ 4196caae8735bb983a2a0bace6f72b0820a755c1(注意:如果您使用的是 zsh,则需要回退 ˆ。另外请注意,这是重复两次的相同 SHA。)

      一旦你杀死了提交,你就不能简单地git push,因为远程分支仍然有那些额外的提交。相反,请执行潜在危险的git push origin -f 以强制远程分支与您的分支匹配(而不是相反)。

      免责声明:我不知道自己在做什么。但是经过几次尝试,我通过做这些事情达到了我想要的状态。

      "cherry-pitting" 命令提供给 Seth Robertson git choose-your-own-adventure 的道具。

      【讨论】:

        猜你喜欢
        • 2020-05-02
        • 1970-01-01
        • 2020-02-12
        • 1970-01-01
        • 2012-03-05
        • 1970-01-01
        • 1970-01-01
        • 2016-07-29
        • 1970-01-01
        相关资源
        最近更新 更多