簡體   English   中英

如何撤消git merge分支

[英]How to undo git merge branch

我在本地倉庫中的兩個新分支中更改了兩個文件(我稱其為“ new_branch”)。 我已經提交了更改並將其推送到遠程倉庫。 然后,我想將這些更改合並到master分支中。 我已經做到了:

$ 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

為什么還要添加其他文件? 以及如何撤消此合並?

這是merge的輸出:

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 --decorate --pretty = oneline --abbrev-commit --all”輸出:

* 5a967d5 (HEAD, origin/mejoras_contralador, mejoras_contralador, master) Controlador mo
* 081224a Cambios en controlador y clase Imagen
* a74e337 añadir directorio vendor a .gitignore
* 42d3217 Primer commit
* b57febc (origin/v1, origin/master, origin/HEAD) version 1 definitiva
* 1d1c5f7 solucionado error de js en botones social media
* 2f40866 primer commit

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

最初不是在new_branch更改了對配置文件的更改,而是在比最后一次提交更早的提交中進行了更改? 因為合並應用了分歧以來的所有變化。

如果您只想應用1次提交的更改(例如,最后一次提交),則需要

git cherry-pick new_branch

順便說一句,正是出於這個原因,不建議對配置文件進行版本控制。 或者擁有一個版本化的版本,還有一個本地未版本化的版本,該版本將與代碼中的版本化版本合並,這樣您就可以擁有默認的配置值,並且還可以使用本地未版本化的配置覆蓋它們。

其他文件可能是在分支的上一個提交中添加的。

如果您尚未推送master分支,則可以使用git reset --hard <sha of last commit on master>輕松撤消合並。要找到該提交,如果查看合並提交消息,您將看到:

合並:1234556 5423456

這顯示了合並分支中的兩個最新提交。 一個來自大師,另一個來自new_branch。 將分支重置為對master的最后一次提交。

警告這正在更改歷史記錄,只有在未按分支機構的情況下才應這樣做。

如果您已經推送了分支,則需要按照http://gitready.com/intermediate/2009/03/16/rolling-back-changes-with-revert.html git revert HEAD~1 -m 1

如果您只想從new_branch獲取某些文件,則有兩種選擇:

1)您可以git cherry-pick提交。 請記住,這將帶來整個提交。 因此,如果在多個提交中對文件進行了更改,那么您只會得到正在挑選的提交中的更改。

2)您可以從另一個分支中檢出文件vie git checkout <branch-name> -- <files>然后將其提交到您的分支中。 基本上,這與cherry-pick所做的是同一件事,但是您只能獲取在一次提交中修改的一些文件,並且您對更改的選擇更加嚴格。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM