2

この質問は以前に尋ねられたと確信していますが、見つけられないようです。重複していたらすみません。

私は裸のリポジトリを持っているので、それを project_x.git と呼びます。設定ファイルを確認すると、

[core]
repositoryformatversion = 0
filemode = false
bare = true
symlinks = false
ignorecase = true
hideDotFiles = dotGitOnly

したがって、それは確かに正しいです。裸=真です。今、マスターをクリーンアップ バージョンに置き換えようとしています。

$ git push origin :master
remote: Updating references: 100% (1/1)
To http://gitrepo.local/git/project_x.git
! [remote rejected] master (branch is currently checked out)
error: failed to push some refs to 'http://gitrepo.local/git/project_x.git'

私はgitblitを使用していますが、それは実際のサーバーのURLではありません。

この応答は私を困惑させます。ベアレポにチェックアウトブランチを作成するにはどうすればよいですか? 誰がそのブランチで作業しています:)、意味がありません。構成が賢明であるか、gitblitが私をいじっているのか、それはむき出しではありません。理解できない?

なにが問題ですか?

ところで私が試しても同じメッセージ

git push -f , 

編集:これは機能しますが、以前に試したようにブランチを削除することはできません。

ありがとう

4

2 に答える 2

6

git clone <url>裸のレポには HEAD セットがあり、引数なしで実行するとチェックアウトされるブランチを実際に指します。

私が知る限り、リモートの HEAD ブランチを削除することはできないため、マスターを削除する場合は、2 番目のブランチをプッシュする必要があり、HEAD をそのブランチに移動してから、空のブランチをマスターにプッシュします。

ローカル:

git branch mybranch
git push origin mybranch

ベアレポで:

git symbolic-ref HEAD refs/heads/mybranch

ローカル:

git push origin :master

もちろん、必要に応じて呼び出す別のブランチをプッシュmasterし、HEAD をそこに戻すこともできます。

git push origin newbranch:master
git symbolic-ref HEAD refs/heads/master #(on bare repo)
于 2013-03-01T12:27:13.330 に答える
0

ローカル リポジトリがリモートの origin/master ブランチを追跡していた/追跡しているようです。そして、ローカルマスターがチェックアウトされました。

git push origin :master

...リモート追跡ブランチを削除していることを意味しますが、同じものをローカルでチェックアウトすると失敗します。リモート ブランチを削除するには、別のローカル ブランチをチェックアウトする必要があると思います。

リモートのベア リポジトリで「最初からやり直す」場合は、(リモート リポジトリで) 新しい

git init --bare

...そしてローカルマスターをそれにプッシュし、それをアップストリームとして設定します。

git push origin master -u
于 2013-03-01T12:27:28.987 に答える