【问题标题】:merge deletes and adds wrong files合并删除和添加错误的文件
【发布时间】:2012-07-17 12:20:06
【问题描述】:

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

我的 DEV 分支早于当前的远程 master,我更新了 DEV,并解决了冲突。
DEV 分支已将提交推送到远程 DEV 分支,因此 rebase 是不可能的 - 据我了解。

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

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

当我打开log 时,我会在提交窗口中看到“父 1”文件和“父 2”文件,但未显示。这是奇怪的部分,(本地/远程相同)master 已删除的文件现在添加,新文件删除。 此外,尽管有一些应该

,“父 2”文件并未产生任何冲突

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

我无法使用Revert 重新创建已删除的文件(那些实际上是主文件中的新文件)。

【问题讨论】:

  • 您是否有可能在某个阶段恢复了合并?如果是这样,那么您会发现重新合并会导致您出现此类问题,您将需要还原还原。 (不作为答案,因为我正在对您可能做了什么做出可能的假设)
  • DEV 分支之前没有与 master 合并,所以没有恢复合并。
  • 您需要说出控制台命令是有原因的:它比用散文描述 UI 操作更明确,并且可以让您创建 SSCCE 让我们重现您的问题。我完全支持 IDE 和 GUI 工具,但是将自己限制在这些工具上会使您更难以准确地描述您的问题。
  • @millimoose 关于我的问题,您觉得令人困惑,或者说的不够清楚?仔细看你会发现我把git命令放在代码标签里了。
  • @Kim 我的意思是它不完整。如果我初始化一个新的存储库并输入这些命令,我​​可能不会收到您描述的错误。 (看到存储库将是空的。)我必须添加一些文件并创建冲突的更改并添加和删除它们,我仍然可能只是得到一个符合你和我期望的合并,而不是你的情况'遇到过。这个想法是,如果你不能描述如何重现你的问题,你就没有真正尝试隔离它。

标签: git merge branch branching-and-merging tortoisegit


【解决方案1】:

我认为您的合并方向不正确:

你应该这样做:

git checkout master
git pull origin master

这里有两种变体:

1) 如果您不想在远程重写 dev 分支历史记录,那么您必须保持原样,但要这样做

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 将被禁止为非快进。希望对您有所帮助。

【讨论】:

  • 选项 2) 有效,尽管日志现在出现故障。此外,我收到一个错误“无法创建文件 X”,其中 X 是 master 中的一个新文件,dev 没有。其他新文件没有给出这个错误。由于这个错误,reset --hard 没有运行,我不得不手动运行。
  • 你调用的乱序对于rebase来说实际上是正常的。这个想法是您接受了 dev 分支中发生的所有提交,因为它与 master 分歧,然后“假装”您实际上在 master 提示之上提交了它们。 IE。移动了 dev 分支的基础。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-30
  • 2014-11-10
  • 1970-01-01
  • 2019-10-24
相关资源
最近更新 更多