我有 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相同的状态。
作为奖励,我想知道使用本地版和使用远程版的意思在这张图片中 - msysgit:
答案 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分支上没有单独的工作,我会感到惊讶你会发生合并冲突)