363

私はローカルブランチで作業し、変更をリモートにもプッシュしました。

そのブランチの変更を元に戻し、別のことをしたいのですが、作業を完全に失いたくないのです。ローカルに新しいブランチを作成してそこに古いブランチをコピーすると、変更を元に戻して古いブランチで作業を続けることができます。

これよりも良い方法はありますか?

4

4 に答える 4

575
git checkout old_branch
git branch new_branch

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

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

git checkout -b new_branch old_branch
于 2013-02-21T09:44:37.093 に答える
88

2 番目の部分を参照してください (Git 2.23 以降、2019 年第 3 四半期):git switch -c newBranch oldBranch


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

Ævar Arnfjörð Bjarmason ( )によるコミット c8b2cec (2017 年 6 月 18 日)を参照してください。commit 52d59cccommit 5463caa (2017 年 6 月 18 日) by Sahil Dua ( ) を参照してください。( 2017 年 10 月 3 日コミット 3b48045Junio C Hamanoによってマージされました)avar
sahildua2305
gitster

branch: --copy( -c) オプションを--move( -m)に追加

ブランチとその reflog および構成に機能を追加します。これは( ) オプション--copyと同じ基礎となる機構を使用しますが、reflog と構成が移動される代わりにコピーされます。--move-m

これは、トピック ブランチを新しいバージョンにコピーする場合 (トピックをリストに送信した後workなど) に役立ちますが、ブランチに付随するすべての追跡情報やその他の構成を保持します。参照。work-2work--move

注: ブランチをコピーすると、現在のブランチに残ります。Junio C Hamano が説明しているよう
に、この新機能の最初の実装は HEAD の変更でしたが、これは良くありませんでした:

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

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

しかし、誰かが私が座っている青い椅子をモデルにして新しい赤い椅子を作ったとしても、青い椅子から追い出されて新しい赤い椅子に座ることになるとは思いません。


2 番目の部分: git 2.23 (2019 年第 3 四半期) では、git ブランチや古い紛らわしいgit checkout: を使用する必要はありませんgit switch

git switch -c newBranch oldBranch
于 2017-10-14T23:12:42.117 に答える
66
git branch copyOfMyBranch MyBranch

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

于 2014-09-27T13:47:42.737 に答える