Git 如何使我的分支像另一个分支一样,同时以单个提交的形式进行更改?
假设我有一个Git 如何使我的分支像另一个分支一样,同时以单个提交的形式进行更改?,git,git-branch,Git,Git Branch,假设我有一个master分支和一个feature分支功能已经严重过时,我现在想让它完全像主机,但我希望对功能所做的所有更改都能在一次提交中显示,以完成“合并” 首先,我尝试了这个: git checkout feature git merge --squash master 但这给了我一个惊喜。我不想手动解决冲突,我只想简单地获取master中的任何内容,并将其处理完毕。所以我这样做: git checkout feature git merge --squash -X theirs mast
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查看的答案。请注意,首先很少有什么好的理由这么做(正如关于该问题的第一条评论所述)
还有另一种方法可以执行此操作,但未在此处列出。这假定您位于存储库的顶级目录中:
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\u MSG
文件,以提供提交消息。)您能澄清一下您的意思吗“但我希望对该功能所做的所有更改都显示在一次提交中"?您想保留或放弃当前在功能中的工作吗?@200_成功我的意思是,我希望所有为使功能
如主控
而必须进行的更改都出现在一次提交中,如使用合并--squash
。重要的问题是,您为什么想要它?可能的重复问题是,到目前为止,您正在删除您在功能上所做的更改,并从master的内容重新开始。因此,也只需删除提交(git reset--hard master
),它们对项目没有任何贡献。