[英]git how to undo Merge branch 'master' of repo into develop branch
[英]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.