1. ホーム
  2. git

[解決済み] 既に存在するかどうかを確認せずに、別のブランチに切り替える(存在しない場合は作成する)?

2023-03-18 03:32:55

質問

git checkout -b foo スイッチオン foo ブランチをオンにしますが (存在しない場合でも作成されます)、もし foo ブランチがすでに存在する場合は、このようなエラーを投げます。

fatal: A branch named 'foo' already exists.

次のようなチェックをするコマンドは何ですか?

  • ブランチが既に存在する場合、そのブランチに切り替えるだけ ( git checkout foo )
  • ブランチが存在しない場合は、ブランチを作成し、その上でスイッチします ( git checkout -b foo )

どのように解決するのですか?

2019年第3四半期更新(Git 2.23):現在、実際にあるのは git switch コマンド !

git switch -c aBranch 

同様のエイリアスが必要ですが。

switchoc = "!f() { git switch $1 2>/dev/null || git switch -c $1; }; f"

switchoc (for "switch or create")というエイリアスの名前に注意してください。

として jar が指摘した コメントで :

2021年にこれを試す人は、以下のことに注意してください。 をシャドウすることはできません。 git コマンドをエイリアスでシャドウすることはできません。 .

このため git switchgit コマンドを使用する場合、このエイリアス(名前は " switch という名前)は機能しません。エイリアスには、" switchit というように、エイリアスに独自の名前を付ける必要があります。


ブガサック のエイリアスは、コメントで後述するように、より安全です (ベースは Jiří Pavelka 's 答え ):

switch = "!f() { git checkout $1 2>/dev/null || git checkout -b $1; }; f"

git switch abranch


オリジナルの回答(2014年) 試してみるとよいでしょう。

git checkout -B foo

から git checkout マンページ :

もし -B が与えられると <new_branch> が存在しない場合は作成され、そうでない場合はリセットされます。これは、トランザクション的に

$ git branch -f <branch> [<start point>]
$ git checkout <branch>

後述するように、ブランチをリセットしてしまうため、使用には注意が必要です。

もし、このコマンドで間違ってブランチをリセットしてしまった場合。 を実行すると、簡単に以前の状態に戻すことができます。 を使うことができます。

git reset HEAD@{1}