新しいブランチへの変更をコミットする方法


150

ブランチを変更しました。変更を他のブランチにコミットするにはどうすればよいですか?

私は使用しようとしています:

git checkout "the commmit to the changed branch" -b "the other branch"

ただし、これは正しいことだとは思いません。この場合、「他のブランチ」への変更をコミットするのではなく、新しいブランチを作成しているためです。

代わりに次のコマンドを使用する必要がありますか?

git merge "the other branch"

コミットは1つだけですか、それとも複数ですか?
Carl Norum、2013

回答:


267

git checkout -b your-new-branch

git add <files>

git commit -m <message>

まず、新しいブランチをチェックアウトします。次に、ステージングにコミットするすべてのファイルを追加します。最後に、追加したすべてのファイルをコミットします。あなたは何をしたいかもしれませんgit push origin your-new-branch、あなたの変更がリモートに表示させ、その後。


1
git checkout v3.0(変更を加える前のブランチ)new-branchから新しいブランチを取得したので、「git add <files>」を使用する必要がありますか?
user1988385 2013

git status現在ステージングされているものとされていないものを確認するためにa を実行できます。
John Brodie、2013

5
なぜ両方git addgit commit -a
Carl Norum、2013

11
git checkout -b your-new-branch代わりではないのgit checkout your-new-branchですか?
シュレディンガーの

1
すでにファイルを追跡していて、新しいブランチに切り替えたい場合は、それらのファイルを新しく作成したブランチに追加しますか?
お尻の王いくつかの質問

57

変更をコミットしていない場合

変更が他のブランチと互換性がある場合

これは、OPが新しいブランチにコミットすることを望んでおり、変更が上書きをトリガーせずにターゲットブランチと互換性がある場合にも適用されるため、これは問題のケースです。

John Brodieが承認した回答のように、新しいブランチをチェックアウトして作業をコミットするだけです。

git checkout -b branch_name
git add <files>
git commit -m "message"

変更が他のブランチと互換性がない場合

エラーが発生した場合:

error: Your local changes to the following files would be overwritten by checkout:
...
Please commit your changes or stash them before you switch branches

次に、作業を隠して新しいブランチを作成し、隠しておいた変更をポップして、競合を解決します。

git stash
git checkout -b branch_name
git stash pop

新しいブランチを作成した後で、これらの変更を行ったかのようになります。次に、通常どおりコミットできます。

git add <files>
git commit -m "message"

変更をコミットした場合

コミットを元のブランチに保持したい場合

この場合に適したツールであるチェリーピッキングを使用したCarl Norumの回答を参照してください:

git checkout <target name>
git cherry-pick <original branch>

コミットを元のブランチに残したくない場合

この潜在的な重複についてjoeytwiddleの回答を参照してください。上記の手順のいずれかを適切に実行し、元のブランチをロールバックします。

git branch -f <original branch> <earlier commit id>

変更をGitHubなどの共有リモートにプッシュした場合は、何をしているのかわからない限り、このロールバックを試行しないでください。


3
誰もがこのコードを試してください。答えを探している人のほとんどが、既存のコードにすでにいくつかの変更を加えています。
Sushin Pv

2
なぜstashとstash popを追加したのですか?新しいブランチをチェックアウトすると、変更を追加してコミットできるようになり、隠しておく必要はありません。
トリスタン

@Tristan変更に互換性があり、ファイルが上書きされない場合は正しいです。それ以外の場合はerror: Your local changes to the following files would be overwritten by checkout: ... Please commit your changes or stash them before you switch branches.、新しい回答を作成しますか、それとも私の回答を編集しますか?そうでない場合は、自分で編集できます。
ミゲルモリン

わかりました、あなたは完全に正しいです。しかし、あなたが答えを完成させ、受け入れられた答えに加えて何がもたらすかを示すべきだと思います。
トリスタン

@トリスタン私はそうしました。OPは新しいブランチについて尋ねていました。その場合、受け入れられた答えは正しいものです。他の人が私の答えが役に立ったと思ったので、私は自分のものにします。それは長い答えになりました。フィードバックがあれば編集できてうれしいです。
ミゲルモリン

24

私が正しく理解している場合、あなたはコミットしchanged_branchているので、そのコミットをコピーしたいother_branchですか?簡単:

git checkout other_branch
git cherry-pick changed_branch

5
これは彼が達成しようとしていることに対する正しい答えです。
ショーン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.