3

私は基本的にやりたい:

git checkout branchA
git checkout -b branchB <commit_id>

onから新しいbranchBブランチを作成します。<commit_id>branchA

質問:

ここで詳細を説明しますが、私が尋ねている理由は、git の履歴がどのように機能するかを理解し、入力の手間を省くためです。(上記のコマンドは、2 つではなく 4 つのコマンドである可能性があります...) ネイティブの git 関数を使用して 1 つにするにはどうすればよいですか? 質問:

上記と同じことを行う簡単な/1行の方法はありますか?

私は単純にやろうと思っていgit checkout -b branchB <commit_id>ましたが、もしそうならbranchC、のログ/履歴がbranchCと同じではない可能性がありますbranchA

バックグラウンド:

この特定の状況に対する私の意図は、バグが本番環境に導入された場合に備えて、以前のコミットにすばやく戻すことです。ただし、新しいコードを保持してから、古いコードがサーバーにプッシュバックされた新しいブランチを破棄したいと考えています。

4

2 に答える 2

5

ただ

git checkout -b branchB <commit>

コミットのハッシュはリポジトリ全体で一意であるbranchAため、結果がまったく同じであるため、以前に変更する理由はありません。

また、これは単なるショートカットです

git checkout <commit>
git branch branchB
git checkout branchB

ご覧のとおり、最初のコマンドは通常のチェックアウトであり、git checkout branchAとにかくあなたに取って代わります.

私は単純にやろうと思っていgit checkout -b branchB <commit_id>ましたが、branchC にいる場合、おそらく動作しないでしょう。branchC のログ/履歴が branchA と同じではない可能性があります。

1 つのリポジトリには 1 つの履歴しかありません。

この特定の状況に対する私の意図は、バグが本番環境に導入された場合に備えて、以前のコミットにすばやく戻すことです。ただし、新しいコードを保持してから、古いコードがサーバーにプッシュバックされた新しいブランチを破棄したいと考えています。

タグのようですね;)

git tag -a -m "Release 1.2.3" v1.2.3
# Deploy 1.2.3
#something broken!
git checkout v1.2.2
# Deploy 1.2.2
于 2012-06-22T06:54:04.180 に答える
2

これらのコマンド

git checkout -b branchB <commit_id>
git checkout -b branchB branchA

つまり、ブランチ (またはコミット) Y に基づいてブランチ X を作成したいので、 Y にいる必要はありません。

最初にベース ブランチに移動する必要がある場合は、次のとおりです。

git checkout branchA
git checkout -b branchB

2 行目で base ブランチについて言及していないことに注意してください。

また、コミットはブランチに固有のものではないことを覚えておいてください。これは単なるポインタであり、それ以上のものではありません。ブランチは削除、移動、名前の変更などを行うことができますが、コミットは変更されません。

于 2012-06-22T06:58:36.133 に答える