6

あるマシンからブランチをプッシュし、別のマシンにプルしたリモート git ベア リポジトリを用意します。

他のマシンでいくつかの変更を行い、それらの変更をリモートの裸のリポジトリにプッシュしようとすると、「receive.denyCurrentBranch」エラーが発生します。

どうしたの?

これは、何もチェックアウトされていない裸のレポでは発生しないはずです。

マシン 2 から見たブランチは次のとおりです。

Fix
dev1
dev2
remotes/origin/HEAD -> origin/dev1
remotes/origin/Fix
remotes/origin/dev1
remotes/origin/dev2
remotes/origin/master

「修正」は、両方の開発マシンの現在のブランチです。

最初にマシン 2 でそのブランチをプルしたとき、次のことを行いました。

git pull
git checkout -b Fix origin/Fix

最初の「remotes」行が疑わしい - HEAD が現在のブランチを指しているように見えるが、そうではない。ここで何かが足りないと思います..

更新 1 「修正」ブランチを dev1 ブランチにマージしてから、「dev1」ブランチをプッシュしました。

これは回避策でしたが、本当の問題は、HEAD が現在のブランチ ('Fix') ではなく、非アクティブなブランチ ('dev1') に関連付けられていたことだと思います。リモートリポジトリのヘッドを変更する方法がわかりませんか?

4

1 に答える 1

1

マシン2から、ローカルリポジトリからリモートリポジトリに参照をアップロードするには、pushコマンドで明示的な参照を使用できます。

git push origin Fix:refs/heads/Fix

その後、マシン1で、fetchコマンドを使用してリモート参照を取得する必要があります

git fetch

ブランチのリスト(git branch -a)には、origin / Fix(またはremotes / origin / Fix)があり、checkoutコマンドを使用してリモートブランチのコンテンツを直接ブラウザできます。

git checkout origin/Fix

変更やコミットなどを行い、マシン2で使用したのと同じコマンドを使用してプッシュします。

git push origin Fix:refs/heads/Fix

ブランチを追跡するには(つまり、リモートブランチを「指す」ローカルブランチを作成し、 -trackオプションを指定してcheckoutコマンドを使用します)。

git checkout --track -b Fix origin/Fix

次に、ローカルブランチの修正に取り組み、他の引数なしでプッシュとプルを実行できます

git pull
git commit
git push
于 2011-04-11T17:21:06.297 に答える