465

gitnewbranchのブランチから名前を付けた新しいブランチを作成しました。master今、私はいくつかの作業を行い、にマージnewbranchしたいと思いmasterます; ただし、にいくつかの追加の変更を加えたので、最後から4番目のコミットまでnewbranchマージしたいと思います。newbranchmaster

私は使用cherry-pickしましたが、正しいオプションを使用するためのメッセージが表示されます。

git checkout master    
git cherry-pick ^^^^HEAD newbranch

代わりにgitを使用mergeしてそれを行うことはできますか?

git merge newbranch <commitid>
4

5 に答える 5

731

確かに、masterブランチにいることはあなたがする必要があるすべてです:

git merge <commit-id>

ブランチで取得したいcommit-id最後のコミットのハッシュはどこにありますか。newbranchmaster

を実行すると、gitコマンドの詳細を確認できますgit help <command>。その場合はgit help merge。また、ドキュメントによると、mergeコマンドの最後の引数は<commit>...であるため、任意のコミットまたは複数のコミットへの参照を渡すことができます。しかし、私は後者を自分でやったことはありません。

于 2011-11-22T07:03:51.340 に答える
20

分岐をクリーンに保つには、次のようにします。

git checkout newbranch
git branch newbranch2
git reset --hard <commit Id> # the commit at which you want to merge
git checkout master
git merge newbranch
git checkout newbranch2

このようにして、newbranchはmasterにマージされた場所で終了し、newbranch2での作業を続行します。

于 2017-12-06T05:16:12.463 に答える
2

以下のコマンドを現在のブランチフォルダに実行して、これから現在のブランチにマージします。新しいコミットを自動的に行わない<commit-id>でください--no-commit

git merge --no-commit <commit-id>

git merge --continueマージによって競合が発生した後にのみ実行できます。

git merge --abort現在の競合解決プロセスを中止し、マージ前の状態を再構築してみてください。

于 2019-07-29T08:37:11.123 に答える
0

最近、私たちは同様の問題を抱えており、別の方法でそれを解決しなければなりませんでした。2つのブランチを最大2つのコミットまでマージする必要がありましたが、どちらのブランチのヘッドでもありませんでした。

branch A: A1 -> A2 -> A3 -> A4
branch B: B1 -> B2 -> B3 -> B4
branch C: C1 -> A2 -> B3 -> C2

たとえば、ブランチAをA2まで、ブランチBをB3までマージする必要がありました。しかし、ブランチCにはAとBからのチェリーピックがありました。A2とB3のSHAを使用すると、同じSHAを持つローカルブランチCのために混乱が生じたように見えました。

あらゆる種類のあいまいさを回避するために、ブランチCをローカルで削除し、コミットA2から開始してブランチAAを作成しました。

git co A
git co SHA-of-A2
git co -b AA

次に、コミットB3からブランチBBを作成しました。

git co B
git co SHA-of-B3
git co -b BB

その時点で、AAとBBの2つのブランチをマージしました。ブランチCを削除し、コミットの代わりにブランチを参照することで機能しました。

これがどれだけ迷信だったのか、何が実際にそれを機能させたのかは私にはわかりませんが、この「長いアプローチ」は役立つかもしれません。

于 2020-07-23T08:33:06.133 に答える
0

特定のブランチをマスターにマージするには、次のようにします。

git reset --hard <commit Id><-マージするコミット

于 2021-05-25T07:37:00.647 に答える