web-dev-qa-db-ja.com

Gitでブランチ名をリモートで変更する

私がgit://にしかアクセスできないリポジトリがある場合(通常は単にPush + pullするだけです)、git branch -mを使用してローカルに行うのと同じ方法で、そのリポジトリ内のブランチの名前を変更する方法はありますか?

361
kdt

目的の名前で新しいローカルブランチを作成し、それを自分のリモートにプッシュしてから、古いリモートブランチを削除するだけです。

$ git branch new-branch-name Origin/old-branch-name
$ git Push Origin --set-upstream new-branch-name
$ git Push Origin :old-branch-name

それから、古いブランチ名を見るために、リポジトリの各クライアントはする必要があります:

$ git fetch Origin
$ git remote Prune Origin

注:古いブランチがメインブランチの場合は、メインブランチの設定を変更する必要があります。そうでなければ、$ git Push Origin :old-branch-nameを実行すると "現在のブランチの削除は禁止されています"というエラーが表示されます

452

ブランチの名前を本当にリモートで変更したい場合は、ローカルブランチの名前を同時に変更せずに、単一のコマンドでこれを行うことができます:

git Push <remote> <remote>/<old_name>:refs/heads/<new_name> :<old_name>

上記のスクリプト( git-rename-remote-branch )を作成しました。このスクリプトは、上記を簡単に行うための便利なショートカットを提供します。

@ ksrbのコメントを統合するには:これは基本的に、1つのコマンドで2つのプッシュを行い、最初にgit Push <remote> <remote>/<old_name>:refs/heads/<new_name>を使用して古いリモートトラッキングブランチに基づいて新しいリモートブランチをプッシュし、次に、git Push <remote> :<old_name>を使用して、古いリモートブランチを削除します。

273
sschuberth

名前を変更したいブランチへの最初のチェックアウト:

git branch -m old_branch new_branch
git Push -u Origin new_branch

remoteから古いブランチを削除するには:

git Push Origin :old_branch
154
Shashank Hegde

もちろんです。ブランチの名前をローカルに変更し、新しいブランチをプッシュして、古いブランチを削除してください。

唯一の本当の問題は、リポジトリの他のユーザがローカルのトラッキングブランチの名前を変更しないことです。

10
Lily Ballard

TL; DR

リモートブランチの「名前変更」は、実際には2ステップのプロセスです(必ずしも順序付けられているわけではありません):

  • 古いリモートブランチの削除(git Push [space]:<old_name> as ksrbの説明 );
  • 新しいリモートブランチにプッシュします(以下のいくつかの回答コマンドの違い)。

削除中

TortoiseGitを使用し、コマンドラインから最初にブランチを削除しようとしたときに、次のようになりました。

$ git Push Origin :in
  • 致命的: 'Origin'はgitリポジトリではないようです

  • 致命的:リモートリポジトリから読み取ることができませんでした。

正しいアクセス権があり、リポジトリが存在することを確認してください。

これは、pageantprivate key loaded(これはTortoiseGitが自動的にpageant)。さらに、TortoiseGitコマンドにはOrigin refが含まれていません(例:git.exe Push --progress "my_project" interesting_local:interesting)。

また、Bitbucketを使用しており、他の種類のWebベースのオンラインgitマネージャー(GitHub、GitLab)として、インターフェイス(ブランチ)から直接リモートブランチを削除できましたページ):

Delete branch Bitbucket

ただし、TortoiseGitでは、Browse Referencesを使用してリモートブランチを削除することもできます。

Browse References menu

リモートブランチ(リモートリスト)を右クリックすると、リモートブランチの削除オプションが表示されます。

TortoiseGit remote branch delete

押す

古いリモートブランチを削除した後、Remote:に新しい名前を入力するだけで、TortoiseGitを介して新しいリモートブランチに直接プッシュしました。 Pushウィンドウのフィールド。このブランチは自動的に作成され、Bitbucketに表示されます。

ただし、手動で行う場合は、このスレッドでまだ言及されていない点は、-u = --set-upstreamです。

git Push docs から、-u--set-upstreamの単なるエイリアスなので、 Sylvain(-set-upstream new-branchShashank(-u Origin new_branch は同等です。これは、リモートref デフォルトはOriginであるため、以前に他のrefが定義されていない場合:

  • ドキュメントの説明 :からのgit Push Origin -u new_branch = git Push -u new_branch

    構成が欠落している場合、デフォルトはOriginになります。

最終的には、ここにある他の回答で提案されたコマンドを手動で入力したり使用したりしなかったため、おそらくこれは同様の状況にある他の人にとって役に立つかもしれません。

2
CPHPython

理由はわかりませんが、@ Sylvain Defresneの回答がうまくいかない。

git branch new-branch-name Origin/old-branch-name
git Push Origin --set-upstream new-branch-name
git Push Origin :old-branch-name

アップストリームの設定を解除する必要があります。その後、ストリームを再度設定できます。以下はその方法です。

git checkout -b new-branch-name
git branch --unset-upstream
git Push Origin new-branch-name -u
git branch Origin :old-branch-name
1
arthur bryant

これが正しいかどうかはわかりませんが、ブランチの「古い名前」をブランチの「新しい名前」にプッシュしてから、次の2行で古いブランチを完全に削除しました。

git Push Origin old_branch:new_branch
git Push Origin :old_branch
0
EpicPandaForce