ブランチのコンテンツを新しいローカルブランチにコピーするにはどうすればよいですか?


270

私はローカルブランチに取り組み、変更をリモートにプッシュしました。そのブランチの変更を元に戻して別のことをしたいのですが、作業を完全に失いたくありません。ローカルで新しいブランチを作成してそこに古いブランチをコピーするようなものを考えていました。変更を元に戻して、古いブランチで作業を続けることができます。多分もっと良い方法はありますか?またはどうすればよいですか?


10
4年後、Gitの2.15(Q4 2017)で、あなたが持っていますgit branch -c A B以下の私の回答を
VonC

回答:


445
git checkout old_branch
git branch new_branch

これにより、「old_branch」と同じ状態の新しいブランチ「new_branch」が作成されます。

このコマンドは、以下と組み合わせることができます。

git checkout -b new_branch old_branch

134
またはさらに短くgit checkout -b new_branchします(既にを使用している場合old_branch)。
Koraktor 2013

4
これは新しいブランチを作成するだけですが、コンテンツをあるブランチから別のブランチにコピーすることはできません。このコマンドを試すと、「****という名前のブランチは既に存在します」と表示されます。
anoop 2013

7
このように新しいブランチを作成した場合、古いブランチのコピーはすぐにはなく、単に古いブランチの先頭に新しいポインタがあるだけだと思います。しかし、新しいブランチのリベースなどを行うと、新しいブランチが変更されている間、古いブランチはまだ元の状態のままです。だから私はそれがOPが望んでいることだと思います。
uli_1973 2013

1
git checkout old_branchとgit branch new_branch ...より上のコマンドを使用すると、次のコマンドで新しいブランチが作成され、新しいブランチに移動します(ブランチを新しいブランチとして変更します)。...git checkout -b new_branch old_branch
キラン

ブランチを上書きするには、stackoverflow.com
questions / 26961371 /…

55
git branch copyOfMyBranch MyBranch

これにより、ブランチをチェックアウトするという潜在的に時間のかかる不要な作業が回避されます。チェックアウトによって「作業ツリー」が変更されることを思い出してください。「作業ツリー」は、サイズが大きい場合や、大きなファイル(画像やビデオなど)が含まれている場合、長時間かかることがあります。


1
もちろん、gitにバイナリファイル(特に大きなファイル)がある場合は、そのファイルの戦略を分析する価値があります。当然、異常なケースが存在し、バイナリファイルがgitにあることは完全に許容されます。
2015

52

Git 2.15(2017年第4四半期)では、既存のブランチをコピーして新しいブランチを作成するgit branchことを " -c/-C" 学びました " 。

参照してくださいc8b2cecコミットにより(2017年6月18日)をÆvarアインホルトBjarmason( )avar Sahil Dua(によるコミット52d59ccコミット5463caa(2017年6月18日)を
参照してください。(による合併Junio C浜野- -3b48045コミット、2017年10月3日)をsahildua2305
gitster

branch:追加--copy-cと行くには)オプションを--move-m

--copyブランチとそのreflogと構成に機能を追加します。これは、--move-m)オプションと同じ基本的な機構を使用しますが、reflogと構成は移動ではなくコピーされます。

これは例えば、例えば新しいバージョンにトピックブランチをコピーするために有用であるworkwork-2提出した後work、すべてのトラッキング情報とブランチに進み、それ以外の構成を維持しながら、リストにトピックを、とは違っ--moveために周りの他の既に提出枝を維持します参照。

注:ブランチをコピーする場合、現在のブランチのままです。
Junio C Hamanoが説明するように:

たまたま現在のブランチでBあるブランチAをコピーして新しいブランチを作成すると、新しいブランチHEADを指すように更新されます。
おそらく、このように作成git branch -c A Bされたのは、「git branch -m A B」で実装を便乗させたためです。

これは通常の期待とは一致しません。
私が青い椅子に座っていて、誰かが来てそれを赤に塗り直した場合、私は現在赤い椅子に座ってしまうことを受け入れます(代わりに、お気に入りの青い椅子がなくなったので、立ってもかまいません) )。

しかし、誰かが新しい赤い椅子を作成し、私が座っている青い椅子をモデルにした場合、青い椅子から起動して新しい赤い椅子に座ってしまうことはないと思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.