我现在处于一个奇怪的情况:我从一位前开发人员那里复制了一个目录(本地仓库)到我的机器上。远程主分支已经有几个提交记录,但是这些提交记录并没有在他的本地仓库中。
我应该如何将本地主分支与远程主分支最新的更改合并?
如果 remote/master
包含与本地 master
相同的所有提交,请执行 git pull
:
git checkout master
git pull remote master
master
是否有remote/master
没有的提交:git fetch remote
git log --oneline --graph remote/master..master
这将展示所有在master
中包含但不在remote/master
中的提交。如果您没有看到任何输出,那意味着remote/master
已经拥有了本地master
的所有内容。
如果本地的master
包含remote/master
没有的提交,你需要确定如何处理它们。你是想保留它们,并将它们与remote/master
合并,还是只想丢弃它们?
如果您想保留它们,可以使用merge
或rebase
将本地master
与remote/master
合并:
git checkout master
git fetch <remote>
# Merge remote/master
git merge remote/master
# Or rebase local commits on top instead
git rebase remote/master
# Push the results
git push remote master
如果您不想保留本地提交,只需将本地 master
硬重置到与 remote/master
相同的点即可:
git checkout master
git fetch remote
git reset --hard remote/master
您可以从Git文档中了解更多关于所有这些命令的信息。我也强烈推荐优秀的免费在线Pro Git书籍,特别是第1至3章和6-6.5章节。
git merge
仅操作本地数据副本,不应因私有远程 repo 的身份验证问题而失败。我认为你的意思是 git fetch
或 git pull
失败了,是这样吗?听起来你需要解决身份验证问题。你是通过 SSH 连接到远程吗?你是否具有访问私有远程的正确凭据?你是否在使用 GitHub、Bitbucket 或者类似的东西?还是远程是自托管的? - user456814