0

新しいブランチ (「new_branch」と呼びます) で、ローカル リポジトリの 2 つのファイルを変更しました。変更をコミットし、リモート リポジトリにプッシュしました。次に、これらの変更を master ブランチにマージしたいと思いました。そして私はやった:

$ git checkout master
$ git merge new_branch

ただし、2 つのファイルが 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 --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 は追加されていません)。

4

2 に答える 2

0

他のファイルは、ブランチの前のコミットで追加された可能性があります。

マスター ブランチをプッシュしていない場合は、簡単にマージを元に戻すことができgit reset --hard <sha of last commit on master> ます。そのコミットを見つけるには、マージ コミット メッセージを見ると、次のように表示されます。

マージ: 1234556 5423456

これは、マージされたブランチ内の 2 つの最新のコミットを示しています。1 つは master からのもので、もう 1 つは new_branch からのものです。ブランチをマスターの最後のコミットにリセットします。

警告 これは履歴を変更しているため、ブランチをプッシュしていない場合にのみ実行する必要があります。

すでにブランチをプッシュしている場合は、http://gitready.com/intermediate/2009/03/16/rolling-back-changes-with-revert.htmlgit revert HEAD~1 -m 1に従って 行う必要があります。

new_branch から特定のファイルのみが必要な場合は、いくつかのオプションがあります。

1)git cherry-pickコミットできます。これにより、コミット全体が行われることに注意してください。したがって、ファイルへの変更が複数のコミットにわたって行われた場合、チェリーピッキングしているコミットで変更されたもののみが取得されます。

2) 他のブランチからファイルをチェックアウトgit checkout <branch-name> -- <files>し、自分のブランチでコミットできます。これは基本的に同じことですcherry-pickが、コミットで変更されたファイルの一部のみを取得でき、変更についてより選択的になります。

于 2013-09-10T13:23:37.917 に答える