2016-03-26 3 views
0

私はブランチBをブランチAにマージしています。 B/file1にいくつかのデバッグコードがある場合は、そのコードを "B"と "A"で同じにして、 "unstage"したいと思います。しかし、私はあなたがマージでステージングできないとは思わない。私は手でそれをやっているが、これは非常に時間がかかり、エラーになりやすい。基本的に、私は2つのブランチをマージし、マージにどのような変更が入るかを選びたい。コミットが多すぎるので、私はチェリーピックを使用できません。GIT:ブランチBをブランチAにマージしたいが、すべての変更をマージしたくない。 Aの相違点の一部をBにコピーしたいとします。

答えて

1

あなたが本当に(おそらく、私はそのシーケンサー機能を使用して、それにとどまる)チェリーピックに対して気にしている場合、このような方法かもしれない:

git merge --log --no-commit BranchB 
git revert --no-commit BadCommit1 BadCommit2... 
git commit 

アイデアがマージを作成することです、その中の「悪い変化」を元に戻すことができます。技術的にはそれはあなたが必要とするものを正確に行います。しかし、あなたのケースの詳細によると、これは良いことかもしれません。の人々の期待は、通常、BranchBのすべての機能がすでにBranchAにあると想定しているためです。したがって、注意して使用してください。

1

私のためのゴールデンコマンドは、git rebase -i HEAD~<number>経由のインタラクティブリベースです。この方法でgitの履歴を書き直すのはとても簡単です。あなたがしたくない

git checkout -b <temp-branch-name> 
  • コミットをオフに削除します:

    git rebase -i HEAD~<number-of-commits-backwards-you-want-to-go> 
    pick <commit-that-i-want> 
    pick <another-commit-that-i-want> 
    
    1. はあなたがどんなミスをするだけで包み、一時的なブランチを作成します。ここでは、あなたの特定のケースのための方法です

      保存して、目的のブランチに切り替えて、一時ブランチをそのブランチにマージします。

      git checkout <destination-branch> 
      git merge <temp-branch-name> 
      
  • +0

    私はしばらく前にマスターを分け、定期的にマスターを自分のブランチにマージしていたとしましょう。ブランチから最新のコミットを選び、それをマスターにマージすれば、そのすべてのコミット、あるいは最後にコミットされた変更だけがありますか? –

    +0

    最初のステートメントでは、開発ブランチにいる間に、新しいコミットの下にあるすべての更新をマスターから取り除くので、単に更新するときに 'git rebase master'を実行することを強くお勧めします。 2番目のステートメントについては、「<コミット数 - 後方へ - あなたが行きたい>>」は、その距離よりも後ろのものすべてが含まれることを意味します。 – mattbrosenberg

    関連する問題