【问题标题】:Merge current branch into HEAD合并当前分支到 HEAD
【发布时间】:2012-08-24 19:46:53
【问题描述】:

Master HEAD 有一些更改,我正在尝试将我当前的本地更改与 Head 合并。
假设我有冲突的更改。 git 只是拒绝 pull

它说我有冲突的更改,所以在这种情况下,我希望它告诉我有冲突的文件,但它希望我恢复我的本地更改然后拉

     Master 
     /    \
  branch1  branch2 (local)
      \
   Master 

当 branch2 尝试向 master 提交更改时失败。在这种情况下我该怎么办?手动将文件复制到某个位置,拉然后使用 winmerge 合并文件?还是有更好的合并方式?

当我执行git pull 时,它指出 - 本地更改将被覆盖,因此在拉取之前存储或提交更改。

当我stashcommit 更改时,然后pull stash pop 失败,说明工作副本中的更改将被覆盖。

顺便说一句,在这两种情况下我都没有看到有冲突的文件,即使我尝试了变基。

【问题讨论】:

  • 无论你做什么,不要只是手动复制文件;你会失去你的历史!
  • 我没有看到提到git merge;你试过用那个吗?我建议您也先阅读此内容:git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging
  • 向我们展示失败的git pull 命令的完整输出
  • 请在合并之前提交您的更改或存储它们。中止 git 没有完全退出(退出代码 1)
  • Git Merge 输出:git.exe merge --no-commit master 已经是最新的。成功

标签: git merge git-merge pull


【解决方案1】:

这个问题的答案隐藏在文档中的普通视图中。来自git help merge


如何解决冲突

看到冲突后,你可以做两件事:

  • 决定不合并。您需要的唯一清理是将索引文件重置为 HEAD 提交以反转 2. 并清理所做的工作树更改 通过 2. 和 3.; git merge --abort 可以用于此。

  • 解决冲突。 Git 将标记工作树中的冲突。将文件编辑成 shape 并 git add 将它们添加到索引中。使用git commit进行密封 交易。

您可以使用多种工具解决冲突:

  • 使用合并工具。 git mergetool 启动图形合并工具,它将帮助您完成合并。

  • 查看差异。 git diff 将显示三向差异,突出显示 HEAD 和 MERGE_HEAD 版本的更改。

  • 查看每个分支的差异。 git log --merge -p <path> 将首先显示 HEAD 版本的差异,然后显示 MERGE_HEAD 版本。

  • 查看原件。 git show :1:filename 显示共同祖先,git show :2:filename 显示 HEAD 版本,git show :3:filename 显示 MERGE_HEAD 版本。

【讨论】:

  • 我没有看到明显的冲突。这就是我想看到的。相反,GIT PULL 刚出来。这是否意味着需要 GIT 合并?
  • 标记的冲突在冲突文件中。编辑问题并包含失败的git pull 命令的输出
  • 另外,请参阅 git status 以查看您的工作副本和索引的状态
  • 另外,实际上看看git help merge 并查看如何呈现冲突部分
  • 我从未见过有冲突的文件。 GIT PULL 或 GIT STASH POP 只是通知我存在冲突。但中止。
【解决方案2】:

看起来使用 GIT 的最佳方式是拥有分支。

分支 1
GIT 提交
GIT 推送
GIT MERGE master(获取更新的更改)

分支 2
GIT 提交
git推送

大师
GIT 合并分支1
GIT 合并分支 2

我认为没有其他方法。如果我错了,请纠正我?

这是正确的吗,如果是的话,在这种情况下使用分支很顺利!

【讨论】:

  • 如何切换master和branch?为了清楚起见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-12
  • 1970-01-01
  • 1970-01-01
  • 2012-12-21
  • 2011-08-28
  • 2010-10-06
  • 1970-01-01
相关资源
最近更新 更多