2

我有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:

    在此处输入图像描述

4

2 回答 2

3

好吧,经过大量的谷歌搜索,事实证明我的策略是错误的。git merge --squash不做我想做的事——即将我的 master 分支镜像到我的 github 分支,而不在 master 中保留提交的历史记录(一个简单的合并可以,但我不想在 github 中有任何 master 的历史记录)。
一方面,它不会删除已删除的文件-有关一个很好的解释,请参见此处
。可能还有其他陷阱-包括无法避免的永久冲突解决方案

无论如何,我认为我找到了正确的方法-这里详细介绍的方法

$ 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

试过了,它确实按我的意愿工作

于 2013-07-18T20:26:57.137 回答
1

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

您可以使用git merge -s theirs指定在这种情况下始终希望另一个 master 分支来赢得所有合并冲突。(虽然我很惊讶如果你没有在 github 分支上做单独的工作,你会遇到合并冲突)

于 2013-05-07T18:11:33.467 回答