我将一些更改从另一个位置推送到我的远程Git master分支,然后在我的本地主存储库中我做了一些更改,这些更改编辑了一些文件并删除了其他文件,现在我必须将这些更改与远程存储库的更改合并。当我尝试推送更改时会出现问题:我的提交仍然使用远程分支上已编辑和更新的旧文件。我不明白我应该如何下载远程文件的更改并将它们与我的更改合并
编辑1
这是存储库的历史记录。 6fee6bf提交是一个修改提交,它将一个新文件添加到先前的提交中,该提交被推送到远程存储库
答案 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
可创建更清晰的历史记录。