在Git中将本地主分支与远程主分支合并

29

我现在处于一个奇怪的情况:我从一位前开发人员那里复制了一个目录(本地仓库)到我的机器上。远程主分支已经有几个提交记录,但是这些提交记录并没有在他的本地仓库中。

我应该如何将本地主分支与远程主分支最新的更改合并?


1
代码相关内容翻译:仓库是否仍然设置为指向相同的远程主分支?有什么阻止你简单地拉取和合并的东西吗? - Timo Geusch
1个回答

53

案例 1:远程/主分支包含与本地主分支相同的所有内容

如果 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的所有内容。

情况2:本地主分支包含远程主分支缺少的提交

如果本地的master包含remote/master没有的提交,你需要确定如何处理它们。你是想保留它们,并将它们与remote/master合并,还是只想丢弃它们?

情况2a:将本地主分支提交合并/变基到远程主分支

如果您想保留它们,可以使用mergerebase将本地masterremote/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

案例2b:放弃本地主分支提交

如果您不想保留本地提交,只需将本地 master 硬重置到与 remote/master 相同的点即可:

git checkout master
git fetch remote
git reset --hard remote/master

文档

您可以从Git文档中了解更多关于所有这些命令的信息。我也强烈推荐优秀的免费在线Pro Git书籍,特别是第1至3章和6-6.5章节。


谢谢。如果远程仓库是私有的,那怎么办?由于无法在远程仓库中进行身份验证,因此“git merge”步骤失败了。 - DrMisha
1
@MishaTeplitskiy git merge 仅操作本地数据副本,不应因私有远程 repo 的身份验证问题而失败。我认为你的意思是 git fetchgit pull 失败了,是这样吗?听起来你需要解决身份验证问题。你是通过 SSH 连接到远程吗?你是否具有访问私有远程的正确凭据?你是否在使用 GitHub、Bitbucket 或者类似的东西?还是远程是自托管的? - user456814
感谢@Cupcake。我之前有一个ssh和权限问题,但现在已经解决了。谢谢! - DrMisha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接