私が持ってBranchA
いるのは、113コミット前のものBranchB
です。
しかし、私はBranchA
マージされBranchB
たからの最後の10個程度のコミットのみを必要としています。
これを行う方法はありますか?
私が持ってBranchA
いるのは、113コミット前のものBranchB
です。
しかし、私はBranchA
マージされBranchB
たからの最後の10個程度のコミットのみを必要としています。
これを行う方法はありますか?
回答:
このgit cherry-pick <commit>
コマンドを使用すると、(任意のブランチから)1つのコミットを取得し、基本的には作業中のブランチでそれをリベースできます。
Pro Gitブックの第5章では、図などを使用して、私ができるよりもよく説明しています。(リベースの章も良い読み物です。)
最後に、別のSOの質問で、チェリーピッキングとマージとリベースについていくつかの良いコメントがあります。
A
が分岐していて、master
それにいくつかの作業を行って、をB
介して子コミットを作成するとしE
ます。たとえばE
、から1行だけ追加されたとしましょうD
。あなたの場合git cherry-pick E
にmaster
、それが適用されないすべての変更をA
通じE
にmaster
支店、またはそれがないだけに変更を適用D
するE
、すなわち、それはにのみその1行を追加しますかmaster
?前者の場合、どうすれば後者を達成できますか?(手動でのコピーと貼り付けは別として)
出典:https : //git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project#Integrating-Contributed-Work
導入された作業をあるブランチから別のブランチに移動するもう1つの方法は、それをチェリーピックすることです。Gitのチェリーピックは、単一のコミットのリベースのようなものです。コミットで導入されたパッチを取得し、現在のブランチに再適用しようとします。これは、トピックブランチに多数のコミットがあり、そのうちの1つだけを統合したい場合、またはトピックブランチに1つだけのコミットがあり、リベースを実行するのではなくチェリーピックしたい場合に便利です。たとえば、次のようなプロジェクトがあるとします。
commit e43a6をmasterブランチにプルしたい場合は、
$ git cherry-pick e43a6
Finished one cherry-pick.
[master]: created a0a41a9: "More friendly message when locking the index fails."
3 files changed, 17 insertions(+), 3 deletions(-)
これはe43a6で導入された同じ変更を引き出しますが、適用される日付が異なるため、新しいコミットSHA-1値を取得します。これで、履歴は次のようになります。
これで、トピックブランチを削除して、プルインしたくないコミットを削除できます。