Gitブランチはどのように機能しますか?masterブランチを削除できますか?


22

開発と生産の2つのブランチがあるプロジェクトがあります。私はmasterブランチを使用していません。書くたびgit statusに、ブランチがmasterからどれだけ先にあるかを教えてくれます。

masterブランチを削除しようとするgit branch -d masterと、ローカルリポジトリでのみ削除され、リモートgitサーバーでは削除されません。何か案は?

回答:


34

Gitでは、ブランチは単なる順序付きのコミットリストです(別名:チェックイン)。新規ユーザーにとって少しわかりにくいのは、ブランチに名前を付ける必要がないということです(ほとんどの場合、名前は必要ですが)。特定のブランチについて特に特別なことは何もありません(masterブランチは、リポジトリを初期化するときに作成されるデフォルトのブランチです)。

おそらくこれはすでにご存知でしょうが、Gitは人気のある「Subversion」のような他のバージョン管理システムとは異なります。すべての「作業コピー」(Subversion言語)は独自のリポジトリであるためです...実際、特に何もありません特定のコピーに関する特別な; ただし、1つのコピーが最終製品の保存に使用される「標準」コピーとして一般的に合意されていることを除きます。

それでは、質問に戻ります...ローカルコピーを開始したときに複製した「標準」リポジトリには、デフォルトで「マスター」ブランチが含まれていました。そして、それは周りに立ち往生しています。ここで、マスターリポジトリを含むコンピューターにアクセスできる場合は、ログインして実行できます。

git branch -d master

ただし、それができない場合でも、ローカルマシンから実行できます。このgit branchコマンドには-r、リモートリポジトリに影響するオプションがあります。つまり、次のコマンドを実行すると動作するはずです。

git branch -d -r master

これらの両方の場合に注意してください。私はそれmasterがあなたのローカルコピーが現在置かれている開発履歴に完全にマージされたと仮定しています。master以前に使用したことがない場合(つまり、developmentまたはにチェックインしたことがある場合production)、心配する必要はありません。ただし、あなた(または他の誰か)がにチェックインしているmaster場合は、問題が発生している可能性があります。上記のコマンドで-dto -Dを変更することにより、強制的に削除できます。しかし、master事前に何が入っているかを確認することを強くお勧めします!リモートコンピューターにアクセスできない場合、おそらく回復できません。


ところで; あなた(または他の誰か)がGitを初めて使用する場合は、John WiegleyによるGit from the Bottom Upを読むことを強くお勧めします。この記事を見つける前に自分でGitを少し使用していましたが、それを読むまでは、Gitがどのように機能するのか本当に理解していませんでした。とても便利です!


3
元のコメントを書いてからしばらくして、gitの動作が少し変わりました。git 1.7.12の時点でgit branch -d -r master、リモートブランチは削除されなくなりました。リモートブランチに関するローカルコピーの知識が削除されます。次回git fetch、ブランチが戻ってきます!代わりに、を実行しますgit push origin :master。基本的に、ここで行うことは、nullブランチ(の左側にある空のブランチ名:)をリモートブランチ(の右側にあるブランチ名)の上にプッシュして:、事実上削除することです。
mparker17

また、リポジトリのクローンを作成すると、通常はデフォルトでマスターをチェックアウトすることに注意してください。これは、クローンを作成するリポジトリのHEAD refに依存します。マスターが削除された後、HEADがデフォルトとして必要なブランチを指していることを確認してください。
Zitrax

Gitへのボトムアップからのリンクはなくなりましたが、これはあなたが参照しているテキストのようです(?)答えのリンクを確認し、おそらく更新してもらえますか?
ORマッパー

ORマッパー:それは私が言及しているテキストです:新しいリンクをありがとう!回答のリンクを更新しました。
mparker17

4

mastergitのデフォルトのブランチです。gitがマスターからどれだけ離れているかを教えてくれるのになぜそんなにひどいのかはわかりませんが、リモートリポジトリのブランチを削除する場合、ローカルで削除するだけでは十分ではありません。代わりにこれを試してください:

git push origin :master

これにより、オリジンサーバーに何もプッシュされず(コロンの前の部分)、マスターが上書きされます。つまり、masterブランチをリモートで削除する必要があります。


私は得る:リモート:エラー:現在のブランチを削除することを拒否:refs / heads / master To github.com ***。git![リモート拒否]マスター(現在のブランチの削除が禁止されています)エラー: ' github.com ***。git'に一部の参照をプッシュできませんでした
Totty.js

1
@Tottyおそらくこの缶のヘルプ:matthew-brett.github.io/pydagogue/gh_delete_master.html
MEM
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.