1

在你开始使用 git 命令之前,我只使用 Windows 7-64bit 和 TortoiseGit(当前为 v1.7.11.3),因为我是 Git 新手。

我的 DEV 分支比当前的远程 master 旧,我更新了 DEV,并解决了冲突。
DEV 分支已将提交推送到远程 DEV 分支,因此这rebase是不可能的——据我所知。

为什么会发生这种行为,我该如何避免?

  1. Checkout master(切换到本地主机)
  2. Pull origin master(没有冲突)
  3. Checkout DEV(切换到开发分支)
  4. Merge master(将本地主更改应用到本地 DEV 分支)
  5. 修复冲突和commit修改文件(自动合并和修复冲突文件)

当我打开log然后我看到提交窗口中的“父 1”文件和未显示的“父 2”文件。这是奇怪的部分,现在添加了(本地/远程相同)master删除的文件,并删除了新文件。 此外,“父 2”文件没有产生任何冲突,尽管有些应该

新/删除的文件与我预期的相反。这是为什么 ?
如果一个文件是 master 中的新文件并且我合并到 DEV 分支,那么我希望它在合并后存在。
我的猜测是 DEV 分支被认为是主要的,而不是我合并到 DEV 中的分支(主)。

我没有Revert用于重新创建已删除文件的选项(那些实际上是 master 中的新文件)。

4

1 回答 1

2

如我所见,您的合并方向不正确:

你应该做:

git checkout master
git pull origin master

这里有两种变体:

1)如果您不想在遥控器上重写开发分支历史记录,那么您必须保持原样但要做

git merge dev # will produce merge commit if not fast-forward 

2)或者如果你不太关心开发分支历史

git checkout dev
git rebase master # now all commits that happened in dev will be "on top" of master, master will be behind
git checkout master
git merge dev # will result in fast-forward merge without merge commit

现在,为了回到错误合并之前的状态,您可以执行以下操作(如果合并是您在 dev 分支中所做的最后一件事):

git checkout dev
git reset --hard HEAD~1

现在您可以正确合并。在第二种情况下,除非您使用 -f 标志,否则大多数时候将 dev 分支推送到远程 dev 将被禁止为非快进。希望有帮助。

于 2012-07-17T20:13:59.863 回答