GitHubでブランチの名前を変更する


297

私は使用して私のローカルブランチの名前を変更しました

git branch -m oldname newname

しかし、これはブランチのローカルバージョンの名前を変更するだけです。GitHubで名前を変更するにはどうすればよいですか?



管理設定をチェックインしましたか?github上の現在のプロジェクトにはブランチがありませんが、そこでリポジトリの名前を変更できるので、ブランチの名前も変更できると思います。
evanmcdonnal 2012年

12
@evanmcdonnalいいえ、GitHubサイトからGitブランチの名前を変更することはできません。
Andrew Marshall

この質問に対する答えは、ほぼ例外なく間違っています。問題は、gitブランチの名前を変更する方法ではなく、githubブランチの名前を変更する方法です。github上の多くのものはブランチに結び付けられています。つまり、答えはそれらのものをカバーする必要があります。たとえば、マスターの名前をメインに
gman

@gman価値があることについては、これらの回答がOPの質問の精神に答えたようです。OPの質問は、技術的に厳密な観点から、または現在調査中の関連する問題から、完全に表現されていない可能性があります。しかし、この質問はgitまたはGitHubの深い技術的背景からのものではありません。この観点から、これは「初心者」または基本的な質問と考えることができます。そのため、このオーディエンスには適切に表現され、回答されています。イライラすることは確かですが、このQ、これらの回答は適切であり、特にBLM以前のgit / Hubの使用に関するQに適しています。
SherylHohman

回答:


309

前述のように、Githubで古いものを削除して再度プッシュしますが、使用するコマンドは必要以上に冗長です。

git push origin :name_of_the_old_branch_on_github
git push origin new_name_of_the_branch_that_is_local

シンプル。コマンドを少し分析すると、git pushコマンドは基本的に次のようになります。

git push <remote> <local_branch>:<remote_branch>

そのため、local_branchを指定せずにプッシュを実行すると、「ローカルリポジトリから何も取得せずに、リモートブランチにする」という意味になります。私はいつもこれは完全に不器用だと思っていましたが、それはそれが行われた方法です。

編集:のようにGit 1.7リモートブランチを削除するための代替構文があります:

git push origin --delete name_of_the_remote_branch

編集:コメントの@ void.pointerで述べられているように

2つのプッシュ操作を組み合わせることができることに注意してください。

git push origin :old_branch new_branch

これにより、古いブランチが削除され、新しいブランチがプッシュされます。

これは、リモートの元のブランチと新しいブランチ名を引数として取る単純なエイリアスに変えることができます~/.gitconfig

[alias]
    branchm = "!git branch -m $2 $3 && git push $1 :$2 $3 -u #"

使用法:

git branchm origin old_branch new_branch

シェルコマンドの位置引数は古い(2.8以前の)バージョンのgitでは問題があったため、エイリアスはgitのバージョンによって異なる場合があることに注意してください。詳細については、この説明を参照してください。


32
2つのプッシュ操作を組み合わせることができることに注意してくださいgit push origin :old_branch new_branch。これにより、古いブランチが削除され、新しいブランチがプッシュされます。
void.pointer 2014

4
古いブランチを削除する前に新しいブランチをプッシュできない理由はありますか?個人的には、何か問題が発生した場合に備えて、作成操作が成功した後に削除操作が発生するプロセスを好みます。
jmort253 2015

7
動作しません。古い名前でブランチをGithubに戻すだけです。
geoff

1
@AdamParkin 1. git branch -m new_branch(old_branchの名前をnew_branchに変更)2. git commit -m 'msg'、3 git push. 4.うーん、old_branchがGithub、Googleの質問に表示され、私はあなたの答えに導かれます5. git push origin :old_branch(削除されたと言います)6. git push origin new_branch...完了してと言い* [new branch] new_branch -> old_branchます。Githubに戻り、old_branch再び表示されます。Github Web UIで削除した場合、「復元」するオプションがあるので、new_branchをプッシュすると復元しているように見えます。
Kcvin 2016年

2
注意すべきことの1つは、ブランチの名前を変更すると、そのプル要求に対して開いているプル要求はすべて自動的に閉じられることです。ブランチの名前を元に戻してから、すべてのプルリクエストを手動で再度開く必要がありました...
jmort253

24

次のコマンドは私のために働きました:

git push origin :old-name-of-branch-on-github
git branch -m old-name-of-branch-on-github new-name-for-branch-you-want
git push origin new-name-for-branch-you-want

これが機能する簡単な答えです。ところで、最初のコマンドを回答の最後のコマンドとして置くこともできます。
Eric Wang

この回答はgithubではなくgitをカバーしています
gman

1
実際、私はこれを2回行っただけで、githubで動作しました。
spozun

17

私はあなたのgitブランチ名を変更する方法を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ローカルブランチとリモートブランチの名前を変更する方法


1
git push --set-upstreamリモートブランチを削除する前にgithub appを使用してローカルでブランチ名を変更した場合、最も重要な部分です。
Louis Yang

この回答はgithubではなくgitをカバーしています
gman

12

古いブランチを削除して新しいブランチを作成するだけです。

例(リモートブランチの名前のみ変更):

git push origin :refs/heads/oldname
git push origin newname:refs/heads/newname

また、おそらくローカルブランチの名前を変更し、プッシュ/プルする場所の設定を変更する必要があります。


1
2番目のコマンドはそうではありgit push origin newname:refs/heads/newnameませんか?masterとnewnameは同じコミットを指していない可能性があります。
スティーブフォリー

「マスター」は一例であり、変更されます。
Vi。

おそらく、2つのコマンドの順序を逆にする必要があります(つまり、最初に新しい名前をアップロードし、その後に古い名前を削除します)
Vi。

この回答はgithubではなくgitをカバーしています
gman

@ gman、Gitの名前をGithubの名前にも変更しませんか?
Vi。

9

ローカルとリモートの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

結論は

git branch -m new-name
git push origin :old-name new-name
git push origin -u new-name

この回答はgithubではなくgitをカバーしています
gman

これはgit用で、GitHubはgitの下にあるため、動作し、私や他の人と一緒に動作します
Abdelrahman Mohamed

動作しません。最初と2番目の手順を試してくださいgit branch -m new-name && git push origin :master new-name。失敗します。この回答がGitHubではなくGitのみに関するものである場合、この質問は他のいくつかの質問の重複であり、終了する必要があります。それが本当にgithubに関するものなら、その答えはgithubをカバーする必要があります。この答えはしません。
gman


2

これが私のために働いたものです:

1.)最初に新しいブランチを作成します:git push github newname:refs / heads / newname

2.)githubサイトで、設定に移動し、デフォルトのブランチをnewnameに変更します

3.)古い名前を削除しますgit push github --delete oldname


0
  1. Atlassian SourceTree(無料)をダウンロードしてください。
  2. リポジトリのローカルクローンをインポートします。
  3. サイドバーで、名前を変更するブランチを右クリックします。コンテキストメニューから[ブランチの名前を変更...]を選択し、名前を変更します。
  4. 原点にプッシュします。

おかげで、ブランチに切り替えてインポートする必要がありました。
フラッシュシェリダン

1
この回答はgithubではなくgitをカバーしています
gman

0

この記事では、それを簡単に行う方法を示します。
1.ローカルGitブランチの名前を変更するには、Gitブランチの-mコマンドを使用して名前を変更し
git branch -m feature1 feature2
ます。2.リモートGitブランチの名前を変更するコマンドを探しているだけなら、これで完了
git push -u origin feature2:feature3
です" これを行う前に、ブランチにタグを付けますgit tag


この回答はgithubではなくgitをカバーしています
gman

0

別の方法は、次のファイルの名前変更することです

  1. プロジェクトディレクトリに移動する
  2. 名前.git/refs/head/[branch-name]を変更.git/refs/head/new-branch-name
  3. 名前.git/refs/remotes/[all-remote-names]/[branch-name]を変更.git/refs/remotes/[all-remote-names]/new-branch-name

ローカルPC オリジン/リモートサーバーの両方でヘッドとリモートの名前を変更します

ブランチの名前が変更されました(ローカルおよびリモート!)


注意

現在のブランチ名にスラッシュ/が含まれている場合、gitは次のようにディレクトリを作成します。

現在のブランチ名: "awe/some/branch"

  • .git/refs/head/awe/some/branch
  • .git/refs/remotes/[all-remote-names]/awe/some/branch

ブランチ名: "new-branch-name"

  1. プロジェクトディレクトリに移動する
  2. branchからファイルをコピーする.git/refs/*/awe/some/
  3. それを入れてください.git/refs/head/
  4. branchすべてからファイルをコピーする.git/refs/remotes/*/awe/some/
  5. それらを入れてください.git/refs/remotes/*/
  6. すべてのopied branchファイルの名前をに変更しますnew-branch-name
  7. ディレクトリとファイルの構造が次のようになっているかどうかを確認します。
    • .git/refs/head/new-branch-name
    • .git/refs/remotes/[all-remote-names]/new-branch-name
  8. すべてのリモートオリジン/サーバー(存在する場合)で同じことを行う
    • info:リモートサーバー上にはすでにrefs / remotes / *ディレクトリがないので、通常はありません。

ブランチの名前awe/some/branchnew-branch-name(ローカルおよびリモート!)に変更されました。

ブランチ名のディレクトリが削除されました。


情報:この方法は最善ではないかもしれませんが、他の方法で問題が発生する可能性のある人にとってはうまくいきます


この回答はgithubではなくgitをカバーしています
gman

0

私の場合、 名前を変更したブランチをにプッシュするための追加のコマンドが必要でした。
git branch --unset-upstream
origin newname

(タイピングを簡単にするために)私は最初にgit checkout oldname
次に、以下を実行します。

git branch -m newname
git push origin :oldname または またはgit push origin --delete oldname
git branch --unset-upstream
git push -u origin newname git push origin newname

この追加の手順が必要になるのは、ブランチ経由でリモートトラッキングを設定する傾向があるためです。このようにして、チェックアウトすると、その後はタイプではなくタイプのみが必要になりますgit push -u origin oldnameoldnamegit pushgit push origin oldname

以前にコマンドを使用しない場合、gitは再作成してプッシュします-意図を打ち破ります。git branch --unset-upstreamgit push origin newbranch oldbranchnewbranchorigin oldbranch


この回答はgithubではなくgitをカバーしています
gman

@gmanポイントを取る。私のソリューションでは、GitHubリポジトリのローカルgitコピーでブランチの名前を変更した後、gitをローカルで使用して、リモートでGitHubのブランチの名前を変更しています。そのため、GitHubのウェブサイトインターフェースではなくコマンドラインを使用したい場合や、更新したいローカルクローンがある場合は、それは特殊なソリューションと考えることができます。この違いを強調し、この回答が一般的な解決策ではなく特殊なケースに対するものであることを明確にしていただきありがとうございます。
SherylHohman

問題はgithubが機能をブランチに結びつけることです。マスターの名前をメインに変更してみてください。指示が失敗します。
gman

-1

次のコマンドは、ブランチの名前をローカルで変更し、リモートロケーションの古いブランチを削除して、新しいブランチをプッシュし、ローカルブランチが新しいリモートを追跡するように設定します。

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

コードスニペットで問題を解決できる可能性がありますが、コードの目的(問題の解決方法)を説明する必要があります。さらに、stackoverflow.com / help / how
Ahmad F

この回答はgithubではなくgitをカバーしています
gman

-1

そのように単純です。ローカルおよびリモートでgitブランチの名前を変更するには、次のスニペットを使用します(テスト済みで、チャームのように機能します)。

git branch -m <oldBranchName> <newBranchName>
git push origin :<oldBranchName>
git push --set-upstream origin <newBranchName>

説明:

  1. ステップの名前を変更:

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

  2. ステップを削除:

    Gitリファレンス: git push origin:experimental originリポジトリーでexperimentalに一致するリファレンスを見つけ(例:refs / heads / experimental)、それを削除します。

  3. リモートリポジトリステップの更新(追跡の上流参照):

    Gitリファレンス:-- set-upstream最新のブランチまたは正常にプッシュされたブランチごとに、引数なしのgit-pull [1]およびその他のコマンドで使用されるアップストリーム(追跡)リファレンスを追加します。詳細については、git-config [1]のbranch..mergeを参照してください。


この回答はgithubではなくgitをカバーしています
gman

-1

3つの簡単なステップ

  • git push originヘッド

  • git branch -m old-branch-name new-branch-name

  • git push originヘッド


この回答はgithubではなくgitをカバーしています
gman

-1

gitブランチでgit branch -m old_name new_nameを実行します。これにより、ローカルリポジトリのブランチ名が変更されます。git push origin:old_name new_nameこれにより、変更した名前がリモートにプッシュされ、古いブランチが削除されますgit push origin -u new_nameリモートブランチ。これは問題を解決します


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