草庐IT

github fork : your branch is 5 commits ahead how to clean this without pushing

coder 2023-06-24 原文

我在 github 上 fork 了一个项目,以便发送 pull 请求。问题是我的做法非常……肮脏。

我在分支的本地副本上工作,为我的修改创建了一个分支并将其 merge 到主分支上。然后我将 master 推送到 github fork 上以创建 pull 请求。

问题是最近,我的 pull 请求被拒绝了。所以现在我比原来的主人提前 5 次提交。为了与原始存储库保持一致,有哪些解决方案?

我是否必须检查新分支中的上游 master 并使用它创建新的 master(怎么做?)

还是删除我的 github 分支(我以前接受过提交)并重新创建它(您可以在此处查看 github 存储库)更好https://github.com/cedlemo/ruby-gnome2

最佳答案

首先,你应该always make your PR form a branch ,不是来自 master
master 用于镜像 upstream/master,'upstream' 是您 fork 的原始存储库的名称。

在您的情况下,请确保:

  • 确保 upstream 存在(git remote -v),
  • 创建一个分支以引用您当前的补丁,并且
  • master 重置为 upstream/master:

之前:

  z--z (upstream/master, with new commits)
 /
z--y--y--y (master with local patches, origin/master)

记住当前的工作:

git checkout master
git checkout -b mybranch
# Or, With git 2.23+
git switch -c myBranch master

# if remote "upstream" does not yet exist
git remote add upstream /url/original/repo
git fetch upstream

# reset master to upstream/master
git checkout master
git reset --hard upstream/master
git push --force

  y--y--y (mybranch)
 /
z--z--z   (master, upstream/master, origin/master)

# replay the patches (even they are rejected for now) on top of master
git switch mybranch
git rebase master
git push -u origin mybranch

        y'--y'--y' (mybranch, origin/mybranch)
       /
z--z--z   (master, upstream/master, origin/master)

这里:git reset --hard upstream/master 将在更新后的 upstream/master 上重置 master HEAD,以便 master反射(reflect)与原始存储库中的历史完全相同的历史。

但由于某些提交以前在 master 上完成并推送到 fork (origin/master),因此您需要用新的 替换该历史记录主 状态。因此 git push --force

rebase mybranch 允许那些当前补丁基于原始存储库的最新提交。

关于github fork : your branch is 5 commits ahead how to clean this without pushing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29049650/

有关github fork : your branch is 5 commits ahead how to clean this without pushing的更多相关文章

随机推荐