与远程主控进行Git同步更改

时间:2013-03-01 19:54:52

标签: git merge rebase

我将一些更改从另一个位置推送到我的远程Git master分支,然后在我的本地主存储库中我做了一些更改,这些更改编辑了一些文件并删除了其他文件,现在我必须将这些更改与远程存储库的更改合并。当我尝试推送更改时会出现问题:我的提交仍然使用远程分支上已编辑和更新的旧文件。我不明白我应该如何下载远程文件的更改并将它们与我的更改合并

编辑1

这是存储库的历史记录。 6fee6bf提交是一个修改提交,它将一个新文件添加到先前的提交中,该提交被推送到远程存储库

  • aef9a19(tmp-master)new commit 2
  • 6fee6bf test commit
  • 48ccbc4(HEAD,origin / master,master)测试提交
  • 1f466df old commit
  • f006d29 old commit x2
  • aba1ce0 old commit x3
  • 04f4a67 old comit x4
  • e22f33b old commit x5

3 个答案:

答案 0 :(得分:3)

我的意见是确保你在当前的主人身上拥有一切,然后从那里创建一个新的分支。然后将本地主服务器硬重置为远程主服务器。然后要么变基,要么挑选那些变化。如下所示:

git branch tmp-master
git fetch origin
git reset --hard origin/master

现在,您可以使用以下内容轻松查看两个分支之间的差异:

git log --decorate=short --oneline --graph --all

Cherry挑选其他提交并解决冲突可能是最简单的,但你也可以试一试。如果您需要更具体的步骤,请告诉我,我会写下来。

更新

既然你在这里,你可以尝试(来自master):

git merge tmp-master

但是对于更清晰的提交历史记录,您可能需要尝试以下操作:

git checkout tmp-master
git rebase master
git checkout master
git merge --ff tmp-master
git branch -d tmp-master
git push origin master

这将获取您的本地提交并在远程更改之上重新应用它们。既然你基本上做了同样的工作,但是从两台不同的机器上,你可能不希望有很多“好的,再次切换的机器”合并提交。

现在,可能存在一些可能的冲突。有几种方法可以照顾到这些。如果您有冲突并且知道您的本地更改优先,那么请执行以下操作(假设来自tmp-master分支,并且在rebase中存在冲突):

git rebase --abort
git branch tmp-master-save
git rebase -X theirs master

然后从上面的步骤git checkout master继续检查一切是否正常。还记得删除其他tmp-master-save分支。创建它只是为了安全保存。当你刚接触到它时,最好有一个安全机制。

答案 1 :(得分:0)

在推送提交之前,您必须使用git pull --rebase命令请求对存储库进行更改。它将获得所有可以安全执行的更改和合并。如果发生一些麻烦,它会告诉你自己纠正冲突,做它并继续使用git rebase合并 - 继续。

答案 2 :(得分:0)

我建议你这样做:

git fetch origin

git rebase origin/master master --preserve-merges

第一个命令fetch会将远程仓库中的信息提取到您的本地仓库中。它会引入所有更改,但不会自动将它们与您任何分支的本地副本合并。

rebase命令首先返回本地主服务器和远程服务器之间的公共点,快速合并来自远程服务器的所有更改,然后在其上应用您的更改。如果您在分支之间的本地副本中进行合并,则使用--preserve-merges可创建更清晰的历史记录。