ローカルGitブランチの名前を変更するにはどうすればよいですか?


8573

ローカルとリモートの両方のGitリポジトリのマスターブランチの名前を変更するで説明されているように、リモートブランチの名前を変更したくありません。

リモートブランチにプッシュされていないローカルブランチの名前を変更するにはどうすればよいですか?

リモートブランチの名前も変更する必要がある場合:
Gitローカルとリモートブランチの両方の名前を変更するには

回答:


13736

ブランチをポイントしているときにブランチの名前を変更する場合は、次のようにします。

git branch -m <oldname> <newname>

現在のブランチの名前を変更したい場合は、次のようにします。

git branch -m <newname>

これを覚えておく方法-mは、mvファイルの名前を変更する「移動」(または)の方法です。エイリアスを追加することも役立ちます。これを行うには、以下を実行します。

git config --global alias.rename 'branch -m'

Windowsまたは大文字と小文字を区別しない別のファイルシステムを使用していて、名前の大文字と小文字のみが変更されている-M場合は、を使用する必要があります。それ以外の場合、gitはブランチが既に存在するというエラーをスローます。

git branch -M <newname>

87
私が本当に知りたいと思ったことは、あなたがプッシュする場合とき/これは必ずしもリモートブランチに影響するかどうかだった
PandaWood

181
@PandaWood:プッシュすると新しいブランチが追加されますが、古いブランチは削除されません。を使用するgit push -f --mirrorと、リモートのブランチの名前が変更されますが、このメソッドは、リモートが現在のリポジトリのコピーになるだけの場合にのみ使用してください。次の質問も参照してください:stackoverflow.com/questions/1526794/git-rename-remote-branch
siride

19
@PandaWood、それはどのようpush.defaultに構成されているかに依存します。デフォルト(matching)では、名前が一致するリモートにプッシュします。あなたがしなければならないgit push origin <newname>:<oldname>か、新しいリモートブランチを作成します。しかし、もしpush.defaultに設定されupstream、その後、次のことが可能push origin headとの事は、リモート上のOLDNAMEに行きます。
エリンスタンフィル2013年

13
@ NightOwl888:-mは、mvファイル名を変更するためのUnixの規則に従って、おそらく「移動」の略です。これは、ディレクトリベースのiノードファイルシステムでの移動と名前の変更がまったく同じであるためです。
siride 2014

51
-mオプションの長い名前はです--move。たとえば、git branch --move master現在のブランチの名前を「マスター」に変更します。
robenkleene

445
git branch -m old_branch_name new_branch_name

上記のコマンドはブランチ名を変更しますが、名前が変更されたブランチを使用する場合は、それに関連付けられている古いアップストリームブランチがある場合はそれを引き続き参照するため、使用には十分注意する必要があります。

ローカルブランチの名前をnew_branch_name(名前の例)に変更した後で、いくつかの変更をマスターにプッシュする場合:

git push origin new_branch_name:master (変更はマスターブランチに適用されますが、ローカルブランチ名はnew_branch_nameです)

詳細については、「Gitでローカルブランチ名を変更する方法」を参照してください。


326

現在のブランチの名前を変更するには:

git branch -m <newname>

159
大文字と小文字のみを変更する場合は、-Mを使用して名前を変更する必要があります。gitはブランチがすでに存在することを通知するからです。
cjspurgeon

289

ブランチの名前を変更する手順は次のとおりです。

  1. 名前を変更する必要があるブランチに切り替えます
  2. git branch -m <new_name>
  3. git push origin :<old_name>
  4. git push origin <new_name>:refs/heads/<new_name>

編集(2017年12月1日):コマンドを実行git statusし、新しく作成されたブランチが古いブランチではなく、独自のリファレンスを指していることを確認してください。古いブランチへの参照が見つかった場合は、次を使用してアップストリームの設定を解除する必要があります。

git branch --unset-upstream

1
どのステップでアップストリームの設定を解除しますか?ステップ4の前?
Cyclonecode 2018

1
それは、正しく名前の変更が完了し、完全なプロセスを説明し、これは最良の答えここにある
クリスHalcrow

212

ブランチが完了したら、ブランチの名前を変更すると便利です。その後、新しいものが登場し、削除して新しいブランチを作成するのではなく、同じブランチで開発したいと考えています。

私の経験から、Gitのローカルブランチとリモートブランチの名前を変更するには、次の手順を実行する必要があります。

複数の状態からの引用-gitでローカルブランチとリモートブランチの名前を変更する

1.ローカルブランチの名前を変更する

名前を変更したいブランチにいる場合:

git branch -m new-name

別のブランチにいる場合:

git branch -m old-name new-name

2.古い名前のリモートブランチを削除し、新しい名前のローカルブランチをプッシュする

git push origin :old-name new-name

3.新しい名前のローカルブランチのアップストリームブランチをリセットします。

git push origin -u new-name

1
これは私にとってはうまくいきました。ここでは2つのステップは私に次のエラーを与えた:error: dst ref refs/heads/<old-name> receives from more than one src.; error: failed to push some refs to 'git@uri:foo/bar.git'
ANTO

1
コマンドをgit push origin :old-name new-name正しく実行したときに問題が発生しましたか?
trungk18 2018

はい(申し訳ありませんが、「2ステップ」ではなく「2ステップ」を意味しました。疲れました)
Anto

116

これまでの答えは正しかったですが、ここにいくつかの追加情報があります:

'-m'(移動)を使用してブランチの名前を安全に変更できますが、同じ名前の既存のブランチがすでに存在する場合でも、名前の変更を強制するため、 '-M'を使用する場合は注意が必要です。以下は、 'git-branch'のmanページからの抜粋です。

-mまたは-Mオプションを使用<oldbranch>すると、に名前が変更され<newbranch>ます。<oldbranch>対応するreflogがあった場合、それはmatch <newbranch>に名前変更され、ブランチの名前変更を記憶するためにreflogエントリが作成されます。<newbranch>存在する場合は、-Mを使用して、名前の変更を強制する必要があります。


2
上書きされたブランチはどうなりますか?
Kevin Dice

新しい名前/ブランチで上書きされます。たとえば、gitに次のブランチがある場合:master b1 <-現在のブランチb2に 'git branch -M b2'を実行すると、次のブランチしかなくなります:master b2 <-現在のブランチb1がなくなり、それを回復するには、ハッシュでチェックアウトする必要があります。「git reflog」と入力すると表示されます。乾杯。
Vanchev

-Mフラグはまた、あなただけの変更例えば、支店名の大文字と小文字を修正している場合は名前の変更を強制するのに便利ですmyBranchMyBranch。(で-m、gitはを返しますfatal: A branch named 'MyBranch' already exists.
Jon Schneider、

92

1.名前を変更

現在のブランチの場合は、

git branch -m new_name

名前を変更する別のブランチの場合

git branch -m old_name new_name

2.新しいリモートブランチを追跡する

-ブランチがプッシュされた場合、名前を変更した後、リモートGitリポジトリからブランチを削除し、新しいローカルに新しいリモートブランチの追跡を依頼する必要があります。

git push origin :old_name
git push --set-upstream origin new_name

74

私はハイフンで始まるブランチに愚かな名前を付け、その後マスターをチェックアウトしました。削除したくなかった自分のブランチ、その中で作業していました。

これらはどちらも機能しませんでした:

git checkout -dumb-name

git checkout -- -dumb-name

"s、's、\sも役に立ちませんでした。 git branch -m動作しません。

これが最終的に修正した方法です。作業コピーの.git / refs / headsに移動し、ファイル名「-dumb-name」を見つけて、ブランチのハッシュを取得します。次に、これをチェックアウトし、正しい名前で新しいブランチを作成し、古いブランチを削除します。

git checkout {hash}
git checkout -b brilliant-name
git branch -d -- -dumb-name

8
refs / headsでファイルの名前を変更しただけではありませんか?
android.weasel 2013年

同上。この魔法を実行するためにディレクトリ構造を掘り下げる必要がある場合は、最後まで行って「mv--dumb-name brilliant-name」を実行します。「git branch -av」を実行すると、次のディレクトリ構造が表示されます。 .git / refs。または、ハッシュを直接表示するには、 'grep -R ^ .git / refs'を実行します。
Dave X

2
あなたはおそらく使用したかもしれませんreflog
コードウィスパー

正直なところ、それがあなたがしたいルートである場合、私は最初に.gitディレクトリを介して(あなたが何をしているのかわからない場合、IMOは混乱し、潜在的に危険です)あざけることを避け、いくつかでそれを実行しますいくつかの「git log」解析を伴う通常のコマンド(適切なフラグを使用してブランチを表示し、どのブランチから新しいブランチをチェックアウトするかを判別する)を実行します。次に、不安定な名前のブランチを削除します。私はgitがいくつかのことを行うにはその内部の仕組みをすべて理解する必要があると主張していることを軽視します、それらのことができることを大いに感謝します。
ジョンV

2.10.1以降では、不適切な名前のブランチを作成するのが困難です。どうにかしてそれを行う場合は、git branch -vを使用してブランチの短いハッシュバージョンを取得できます(リモートの場合は-rを追加します)。その後、必要に応じてgit rev-parse <shorthash>を使用して完全なハッシュを取得できます。
デクスター家

67

ローカルでブランチの名前を変更するには:

git branch -m [old-branch] [new-branch]

次に、これらの変更をリモートサーバーにも反映させる必要があります。

削除された古いブランチの変更をプッシュするには:

git push origin :[old-branch]

新しいブランチの作成の変更をプッシュするには:

git push origin [new-branch]

57

名前の変更remoteをGitHubと同様に複製するための3つのステップ:

ステップ1 git branch -m old_branchname new_branchname

ステップ2 git push origin :old_branchname new_branchname

ステップ3 git push --set-upstream origin new_branchname


2
私はさらに1つの追加のことを行う必要がありました。git push --set-upstream origin new_branchnameこれは@Nomadeの回答で言及されています
IbrahimShendy

2
ステップ3は不要です。すべてが最新だったステップ2の後に
Devの

@DevすべてのケースでDevではありません。bitbucketとcodecommitを使用しているため、最近更新する必要がありました。手順3が必要です
Harry_pb

40

次のコマンドを使用して、ブランチの名前を変更します。

git branch -m [old_branch_name] [new_branch_name]

-m:ブランチの名前を変更/移動します。すでにブランチがある場合は、エラーが発生します。

すでにブランチがあり、そのブランチで名前を変更したい場合は、以下を使用します。

 git rename -M [old_branch_name] [new_branch_name]

ヘルプの詳細については、ターミナルで次のコマンドを使用してください。

git branch --help

または

man git branch

40

上級Gitユーザーは、次を使用して手動で名前を変更できます。

Rename the old branch under .git/refs/heads to the new name

Rename the old branch under .git/logs/refs/heads to the new name

Update the .git/HEAD to point to yout new branch name

34
  1. ローカルブランチの名前を変更します。

名前を変更したいブランチにいる場合:

git branch -m new-name

別のブランチにいる場合:

git branch -m old-name new-name
  1. 古い名前のリモートブランチを削除し、新しい名前のローカルブランチをプッシュします。

git push origin :old-name new-name

  1. 新しい名前のローカルブランチのアップストリームブランチをリセットします。ブランチに切り替えてから:

git push origin -u new-name

または、そのための迅速な方法として、次の3つのステップを使用できます。

#ローカルでブランチの名前を変更

git branch -m old_branch new_branch  

#古いリモートブランチを削除します

git push origin :old_branch  

#新しいブランチをプッシュし、ローカルブランチを設定して新しいリモートを追跡します

git push --set-upstream origin new_branch   

リファレンス:https ://www.w3docs.com/snippets/git/how-to-rename-git-local-and-remote-branches.html


これは私のために働く
Vazgen Manukyan

26

以下が3つのステップです。端末内で呼び出してブランチ名を変更できるコマンド。

git branch -m old_branch new_branch         # Rename branch locally
git push origin :old_branch                 # Delete the old branch
git push --set-upstream origin new_branch   # Push the new branch, set local branch to track the new remote

さらに必要な場合は、ステップバイステップで、Gitブランチ名を変更する方法を参照してください。


25

おそらく他の人が言及しているように、これはブランチの命名でケースの不一致になるでしょう。

あなたがそのような状況にある場合、私はあなたがWindowsを使用していると推測できます。

$ git branch -m CaseSensitive casesensitive
fatal: A branch named 'casesensitive' already exists.

次に、中間ステップを実行する必要があります。

$ git branch -m temporary
$ git branch -m casesensitive

これ以上何もない。


1
この状況はMacでも発生する可能性があることに注意してください。Mac でも、(例外的に厄介なことに)ファイルシステムでは大文字と小文字が区別されません。
Jon V

または、の-M代わりに-mを使用して、このような「ケーシングフィックス」の名前変更を1つのステップで実行できます。
ジョンシュナイダー

23

質問(少なくともタイトル)に明確に答えようとする。

ローカルブランチの名前を変更することもできますが、リモートで古い名前を追跡し続けます。

git branch -m old_branch new_branch
git push --set-upstream origin new_branch:old_branch

これで、を実行するgit pushと、リモートold_branch参照がローカルで更新されますnew_branch

この構成を知って覚えておく必要があります。しかし、リモートブランチの名前を選択できなくても、それが気に入らない場合に役立ちます(つまり、非常に優れています。理由!)ローカルブランチの名前。

フェッチ構成を操作すると、ローカルのリモート参照の名前を変更することもできます。つまり、refs/remote/origin/new_branchブランチへのrefポインタがあり、実際にはold_branchon originです。しかし、あなたの心の安全のために、私はこれを強くお勧めしません。


22

ローカルでブランチを変更するのはとても簡単です...

名前を変更するブランチにいる場合は、次のようにします。

git branch -m my_new_branch

それ以外の場合、masterまたは名前を変更するブランチ以外のブランチを使用している場合は、次のようにします。

git branch -m my_old_branch my_new_branch

また、以下の画像を作成して、コマンドラインでこれを実行しているところを示しています。この場合、あなたはmasterブランチにいます、例えば:

ローカルでブランチ名を変更する



20

現在のブランチの名前を変更するには(デタッチされたHEAD状態を除く)、次のエイリアスも使用できます。

[alias]
    mvh = !sh -c 'git branch -m `git rev-parse --abbrev-ref HEAD` $1'

18

別のオプションは、コマンドラインをまったく使用しないことです。SourceTreeなどのGit GUIクライアントは、このような質問をStack Overflowで最もよく見られるようにする構文上の学習曲線/苦痛の多くを。

SourceTreeで、左側の[ブランチ]ペインのローカルブランチを右クリックし、[名前の変更...]を選択します。


5
私はそれを痛みとは呼びません。gitコマンドは非常に使いやすく、一度この答えを見たら、二度と戻ってくることはないでしょう。問題はそれだけではないので、gitコマンドラインのドキュメントは直感的に十分ではないようです。
Nearoo

1
確かに、SourceTreeがあれば、ドキュメントのチェックについて心配する必要はほとんどありません。すべてが一般的に直感的です-右クリックしてオプションを確認してください。(ちなみに、私は決してツールとは関係ありません-ツールのように!)
Steve Chambers

17

それを行う簡単な方法:

git branch -m old_branch new_branch         # Rename branch locally
git push origin :old_branch                 # Delete the old branch
git push --set-upstream origin new_branch   # Push the new branch, set local branch to track the new remote

詳細については、参照、これを


15

ブランチをリモートサーバーにプッシュしたくないので、この例は役に立ちます:

「my-hot-feature」という既存のブランチがあり、その名前を「feature-15」に変更したいとします。

まず、ローカルブランチを変更します。これは簡単なことではありません:

git branch -m my-hot-feature feature-15

詳細については、ローカルおよびリモートでGitのブランチの名前を変更するをご覧ください。


13

Gitバージョン2.9.2

あなたがいるローカルブランチの名前を変更したい場合:

git branch -m new_name

別のブランチの名前を変更する場合:

git branch -m old_name new_name

別のブランチの名前を既存の名前に変更する場合:

git branch -M old_name new_name_that_already_exists

注:最後のコマンドは破壊的でブランチの名前を変更しますが、ブランチ名は一意でなければならないため、その名前の古いブランチとそれらのコミットは失われます。


11

現在のブランチの名前を変更する場合は、次を実行します。

git branch -m [old_branch] [new_branch]

古いリモートブランチを削除する場合は、次のコマンドを実行します。

git push origin :[old_branch]

古いリモートブランチを削除して新しいリモートブランチを作成する場合は、次のコマンドを実行します。

git push origin :old_branch new_branch

6

Gitブランチの名前変更は、以下を使用して実行できます。

  1. git branch -m oldBranch newBranch

  2. git branch -M oldBranch ExistingBranch

-m-Mの違い:

-m:あなたが使用して、既存の支店名を使用してブランチの名前を変更しようとしている場合は-mを。ブランチが既に存在するというエラーが発生します。一意の名前を付ける必要があります。

だが、

-M:これは、たとえ存在していても、指定された名前で強制的に名前を変更するのに役立ちます。したがって、既存のブランチはそれで完全に上書きされます...

これがGitターミナルの例です、

mohideen@dev:~/project/myapp/sunithamakeup$ git branch
  master
  master0
  new_master
  test
* test1
mohideen@dev:~/project/myapp/sunithamakeup$ git branch -m test1 test
fatal: A branch named 'test' already exists.
mohideen@dev:~/project/myapp/sunithamakeup$ git branch -M test1 test
mohideen@dev:~/project/myapp/sunithamakeup$ git branch
  master
  master0
  new_master
* test
mohideen@dev:~/project/myapp/sunithamakeup$

5

Git GUIユーザーにとっては、それほど単純なことではありません。Git GUIで、メニュー項目Branch:Renameから作成された[Rename Branch]ダイアログボックスのドロップダウンリストからブランチ名を選択し、新しい名前を入力して、[Rename]をクリックします。ドロップダウンリストの場所を強調表示しました。

ローカルGitブランチの名前を変更する


3

あなたがしたい場合は:

  • Gitリポジトリの名前を変更し、次を実行: git branch -m <oldname> <newname>
  • 古いブランチを削除するには: git push origin: old-name new-name
  • 以下を使用してコミットします。 git commit <newname>
    • を使用してプッシュします: git push origin new_branch_name:master
  • ステータスを確認したい場合は、次を使用します。 git status
  • チェックアウトする場合は、次を使用します。 git checkout

3

これまでの答えはすべてについて話していgit branch -mます。もちろん操作は簡単ですが、私にとっては、別のGitコマンドを覚えるのが少し難しいかもしれません。だから、慣れ親しんだコマンドで仕事を終わらせようとした。ええ、あなたはそれを推測したかもしれません。

使用しますgit branch -b <new_branch_name>。古いブランチを保存したくない場合は、実行git branch -D <old_branch_name>して削除できます。

少々面倒かもしれませんが、理解して覚えるのは簡単です。お役に立てれば幸いです。


コマンドの記憶に問題がある場合は、シェルまたはgitエイリアスを自分で設定できます。
ショーン

非常に多くの異なるマシンでコマンドを実行する必要がある場合はどうなりますか?
ダイカイシアン

1

PhpStorm:

VCS→Git→ブランチ...→ローカルブランチ→ _your_branch_ →名前の変更


0

あなたがしなければならないすべては3つのステップです:

  1. .git / refs / headsの下の古いブランチに新しい名前を付けます
  2. .git / logs / refs / headsの下の古いブランチに新しい名前を付けます
  3. 新しいブランチ名につながるように.git / HEADを更新します
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.