git merge squash - 冲突解决时,我想要的只是从我被压扁的分支的变化

时间:2013-05-07 17:09:06

标签: git git-merge merge-conflict-resolution squash

我有 github 分支,当主分支达到某个可接受的状态时(我已经完成了一次),我将其推送到github。为此我做了:

MrD@MRSD /c/Dropbox/eclipse_workspaces/android/AndroidMonitoring (master)
$ git checkout github
Switched to branch 'github'
MrD@MRSD /c/Dropbox/eclipse_workspaces/android/AndroidMonitoring (github)
$ git merge --squash master
Auto-merging src/gr/uoa/di/monitoring/android/services/Monitor.java
CONFLICT (add/add): Merge conflict in src/gr/uoa/di/monitoring/android/services/
Monitor.java
//...
Automatic merge failed; fix conflicts and then commit the result.

我想要的是让工作目录完全处于与主HEAD相同的状态。

  • 我这样做的方式是错误的(反复合并--squashing到github分支)。
  • 是否有一种简单的,以白痴为标准的方式来实现这一目标(不经历每次冲突)。
  • 作为奖励,我想知道使用本地版使用远程版的意思在这张图片中 - msysgit:

    enter image description here

2 个答案:

答案 0 :(得分:3)

经过大量谷歌搜索后发现我的策略是错误的。 git merge --squash没有做我想做的事情 - 即将我的主分支镜像到我的github分支,而不保留提交的历史记录(一个简单的合并会做,但我不想拥有任何主人的历史记录) github上)。
例如,它不会删除已删除的文件 - 有一个很好的解释,请参阅here
可能存在其他陷阱 - 包括can't be avoided

的永久性冲突解决方案

无论如何,我认为我找到了正确的方法 - 详细here

$ git checkout master@{0}
$ git reset --soft github
$ git commit
$ git branch temp
$ git checkout temp
$ git branch -M github
$ git push -u -v  origin github:master

尝试了它,它确实按照我想要的方式工作

答案 1 :(得分:1)

您必须使用git merge --squash跟进git commit,因此您的工作流程可能存在错误。

您可以使用git merge -s theirs指定在这种情况下始终希望其他主分支赢得所有合并冲突。 (虽然如果你在github分支上没有单独的工作,我会感到惊讶你会发生合并冲突)