如何撤消git合并分支

如何撤消git合并分支,git,Git,我已经更改了本地回购协议的两个文件,在一个新的分支中(我将其称为“新分支”)。我已提交更改并推送到远程回购。然后,我想将这些更改合并到主分支中。我已经做到了: $ git checkout master $ git merge new_branch 但不仅这两个文件被添加到master中,还添加了其他配置文件。我刚才做了: $ git add file1 $ git add file2 $ git commit -m "changes file1 and file2" $ git push -

我已经更改了本地回购协议的两个文件,在一个新的分支中(我将其称为“新分支”)。我已提交更改并推送到远程回购。然后,我想将这些更改合并到主分支中。我已经做到了:

$ git checkout master
$ git merge new_branch
但不仅这两个文件被添加到master中,还添加了其他配置文件。我刚才做了:

$ git add file1
$ git add file2
$ git commit -m "changes file1 and file2"
$ git push -u origin --all
为什么还要添加其他文件?我如何撤销这个合并

这是合并的输出:

Updating b57febc..5a967d5
Fast-forward
.gitignore                                       |    6 +-
app/config/parameters.yml                        |    2 +-
src/MSD/HomeBundle/Controller/HomeController.php |  421 +++++++++++-----------
src/MSD/HomeBundle/Entity/Imagen.php             |  298 +++++++++++++++
web/bundles/msdhome/js/acercade.js               |    2 +-
5 files changed, 506 insertions(+), 223 deletions(-)
create mode 100644 src/MSD/HomeBundle/Entity/Imagen.php
我只想改变一下:

src/MSD/HomeBundle/Controller/HomeController.php
src/MSD/HomeBundle/Entity/Imagen.php  
“git log--graph--decoration--pretty=oneline--abbrev commit--all”输出:


似乎也添加了.gitignore(但不是app/config/parameters.yml)

配置文件的更改不是最初在
新分支中更改的吗,而是在比上一个分支更早的提交中更改的吗?因为“合并”应用了发散后的所有更改

如果您只想应用1 commit的更改(比如最后一个),那么

git cherry-pick new_branch

顺便说一句,由于这个原因,不鼓励对配置文件进行版本控制。或者有一个版本化的,但也有一个本地的,未版本化的,将与代码中的版本化的合并,这样您就可以有默认的配置值,也可以用本地的,未版本化的配置覆盖它们。

其他文件很可能是在分支之前的提交文件中添加的

如果您没有推送主分支,则可以使用git reset--hard
轻松撤消合并以查找该提交,如果查看合并提交消息,您将看到:

合并:1234556 5423456

这将显示合并的分支中的两个最新提交。一个来自师父,另一个来自新科。将分支重置为主机上的最后一次提交

警告 这正在改变历史,只有在没有推动分支的情况下才应该这样做

如果您已经推送了分支,那么您将需要
git还原头~1-m1
per

如果您只想从new_branch获得某些文件,您有两个选项:

1) 您可以
git cherry pick
commit。请记住,这将带来整个承诺。因此,如果在多个提交中对文件进行了更改,那么您将只获得您正在选择的提交中更改的内容


2) 您可以签出其他分支vie
git checkout--
中的文件,然后在您的分支中提交它们。这与
cherry pick
所做的基本相同,但是您只能获取在提交中修改的部分文件,并且您对更改的选择更加严格。

其他文件是在
新分支的上一次提交中提交的吗?合并一个分支时,您会得到它的所有提交。我已经用输出进行了编辑。您是否还会显示命令的相关部分:
git log--graph--decoration--pretty=oneline--abbrev commit--all
可能重复的
git cherry-pick new_branch