【问题标题】:Git won't pull changes from another branch?Git不会从另一个分支中提取更改?
【发布时间】:2013-11-26 17:25:03
【问题描述】:

编辑:我应该注意到这些更改应该已经从“集成”分支合并。他们不知何故没有进入那个合并,现在 Git 不会添加他们,因为它坚持分支是“已经是最新的”。啊。

当我尝试将另一个分支合并到其中时,Git 不会更新我的分支。

此文件在另一个分支中存在差异,但是当我尝试合并该分支时,Git 告诉我“已经是最新的”:

$ git diff --stat integration MyApp/src/main/webapp/WEB-INF/jsp/flow/appInfo.jsp
 .../webapp/WEB-INF/jsp/flow/appInfo.jsp    | 54 ++++------------------
 1 file changed, 10 insertions(+), 44 deletions(-)

$ git merge integration
Already up-to-date.

我不太确定这怎么可能——谁能解释一下这种情况是怎么发生的?

【问题讨论】:

  • 您是否正在尝试将远程分支合并到本地分支?您给出的命令会将本地分支“集成”合并到您当前所在的任何分支(可能是主分支)。
  • 不,这都是本地的。 Diff 显示本地分支,merge 也是。
  • 似乎integration 已经合并到当前分支中,但当前分支存在其他提交/更改。这就是为什么git merge integration 没有做任何事情,但git diff 显示了不同之处。

标签: git


【解决方案1】:

当你要求 git 合并时,它会根据分支之间的历史形状来决定要做什么。由于 git 报告它已经是最新的,integration 必须是HEAD 的祖先。您可以通过查看以下输出来调查这是如何产生的:

git log --oneline --graph --decorate integration HEAD

如果您想用integration 分支中的文件替换该文件的本地版本,您可以进行单文件签出:

git checkout integration -- MyApp/src/main/webapp/WEB-INF/jsp/flow/appInfo.jsp

或者,您可以进行补丁检查以单独查看每个差异块并决定是否应用它:

git checkout -p integration -- MyApp/src/main/webapp/WEB-INF/jsp/flow/appInfo.jsp

【讨论】:

  • 通过“历史的形状”,我​​的意思是:如果有新的集成提交和 HEAD 上的新提交,则会发生适当的合并。如果只有新的集成提交,则会发生“快进”合并。如果 HEAD 上只有新的提交(听起来很适合您),则没有什么可合并的。
  • 我对此感到困惑 - 是的,集成分支刚刚合并,但这些更改应该随着合并而来!与集成的合并是先前的提交。这个文件(天知道还有多少其他文件)没有正确合并似乎是错误的。
  • 您可以使用git show -m <sha of merge commit> 查看合并提交的完整差异(从双方),以了解在合并过程中还做了什么。是否有需要解决的冲突? HEAD 也碰过appInfo.jsp 吗?自从您从integration 分支之后,您关心的对appInfo.jsp 的更改是否已完成?
  • 我想我在初始合并时一定做错了什么。我已经删除了我的分支并重新开始(这次从集成分支),事情似乎变得更好了。我会看看我能走多远。感谢您的帮助(和耐心)。
猜你喜欢
  • 2011-03-08
  • 1970-01-01
  • 2020-06-03
  • 2020-06-03
  • 2019-03-17
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
  • 2018-12-19
相关资源
最近更新 更多