我知道有几个类似的问题,但我认为我的情况有点不同.
假设有一个我想贡献的GitHub存储库.我将该存储库分叉到我的GitHub帐户,然后从我的PC中的帐户克隆分支.精细.
在处理问题之前,我首先要将fork与"原始"存储库同步.我转到我的帐户分支,单击New Pull请求,确保我选择我的作为基础并且原始主服务器作为主叉,我看到差异(人们在原始存储库中做的所有提交都不在我的) .然后我在我的fork上创建了pull请求,并在fork中合并了这些更改.我去我当地的仓库做了一个git pull,我把所有东西都同步了.精细.
问题来了,现在我的GitHub帐户中总是说'这个分支是X提交',其中'X'是我执行上述同步过程的次数.因此,每次我向原始存储库(而不是我的fork)执行pull请求时,都会显示我正在提交我的代码以及 X更多提交,这是我在fork上与原始存储库同步的合并.
当然,我不想将这些更改推送到原始存储库,因为它们已经有了这些更改,所以我不明白为什么GitHub一直告诉我我有更改要提交.
我认为这是必须在我的GitHub帐户上解决的问题,因为在我的本地存储库中没有任何更改或问题,实际上我甚至删除了它并再次重新克隆.
你有什么想法?
Sco*_*don 66
正如您所猜测的,这些额外提交可能是您创建的Pull请求的合并提交.
将来,有一种更简单的方法可以将fork与原始存储库同步.在您的本地仓库中,在初始克隆之后执行:
git remote add upstream https://github.com/upstream/repo.git
Run Code Online (Sandbox Code Playgroud)
然后,只要您想从上游同步更改,请执行以下操作:
git pull --rebase upstream master
git push --force-with-lease origin master
Run Code Online (Sandbox Code Playgroud)
(如果您有未合并到上游仓库的提交,则只有--rebase和--force-with-lease选项才有必要.)
强制警告:由于rebase重写了历史记录,这对于在该分支机构工作的任何人来说都是危险/破坏性的.确保您清楚地告知您与您合作的任何人所做的事情.由于这是一个私人分支,我认为这对你来说不是问题.
现在来解决你当前的问题.
重置您的本地分支以匹配upstream:
git checkout master
git reset --hard upstream/master
Run Code Online (Sandbox Code Playgroud)如果您在fork中创建了任何提交,则可以将cherry-pick它们添加到更新版本中master.如果你不记得或需要帮助找到它们,比如
git log --oneline master origin/master
Run Code Online (Sandbox Code Playgroud)
应该向您显示不在上游的任何提交.
上面我假设你只使用一个分支,master.如果您还没有,我强烈建议您为您使用的每个功能/错误修复创建一个新分支.除了其他好处之外,这还允许您在等待较早的PR合并时开始处理另一个功能/错误修复.如果你从不直接提交master,那么你可以在没有--rebase或者--force-with-lease:
git checkout master
git pull upstream master
git push origin master
Run Code Online (Sandbox Code Playgroud)
要在更新后更新功能分支master,请执行以下操作:
git checkout myfeature
git rebase master
git push --force-with-lease origin myfeature # if you have already pushed
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31219 次 |
| 最近记录: |