1

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

编辑 1

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

  • aef9a19 (tmp-master) 新提交 2
  • 6fee6bf 测试提交
  • 48ccbc4 (HEAD, origin/master, master) 测试提交
  • 1f466df 旧提交
  • f006d29 旧提交 x2
  • aba1ce0 旧提交 x3
  • 04f4a67 旧提交 x4
  • e22f33b 旧提交 x5
4

3 回答 3

3

我的意见是确保你已经在当前的 master 上提交了所有内容,然后从那里创建一个新的分支。之后将本地主机硬重置为远程主机。然后要么变基要么选择这些更改。类似于以下内容:

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

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

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

挑选其他提交并随时修复冲突可能是最简单的,但您也可以尝试变基。如果您需要更具体的步骤,请告诉我,我会写下来。

更新:

既然你在这里,你可以尝试(从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分支。创建它只是为了安全保存。当您对此不熟悉时,最好有一个安全机制。

于 2013-03-01T20:24:27.813 回答
0

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

于 2013-03-01T20:00:21.677 回答
0

我建议你这样做:

git fetch origin

git rebase origin/master master --preserve-merges

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

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

于 2013-03-01T20:04:01.620 回答