如何将更改作为单个提交进行,我如何使我的分支像另一个分支?

时间:2014-08-22 04:50:11

标签: git git-branch

假设我有一个master分支和一个feature分支。 feature严重过时,我现在想要使其与master完全相同,但我希望对feature所做的所有更改都是为了完成“合并”而出现在单一提交。

首先我尝试了这个:

git checkout feature
git merge --squash master

但这给了我一万亿次冲突。我不想手动解决冲突,我想简单地接受master中的任何内容并完成它。所以我这样做:

git checkout feature
git merge --squash -X theirs master

有了这个,我仍然会遇到合并冲突(文件在master中被删除。我现在该怎么做?我可以做git reset --hard master但是我没有收到显示更改的提交消息

有什么想法吗?我正在使用git 1.8.1.2

1 个答案:

答案 0 :(得分:1)

查看git command for making one branch like another的答案。请注意,首先很少有任何理由这样做(正如已经提到的那个问题的第一条评论)。

还有其他方法可以做到这一点,而不是列在那里。这假设您处于存储库的顶级目录中:

git checkout feature
git merge --no-commit -s ours master # -s ours just to make things quiet
git rm -q -rf .           # remove all resulting files
git checkout master -- .  # replace with master branch version
git commit

事实上,你根本不需要git merge命令;这是没有它的变种:

git checkout feature
git rm -q -rf .; git checkout master -- .
git rev-parse master > .git/MERGE_HEAD
git commit

(不同之处在于最后一个git commit将为您提供不同的启动消息 - 使用git merge --no-commit同时在git目录中留下MERGE_MSG文件,以提供提交消息)