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
),它们对项目没有任何贡献。