3

私は Linonde を使用して、git リポジトリと実際のサイト ファイルをホストしています。

git branch -r は次のようになります。

company/master
company/stage
origin/HEAD -> origin/master
origin/master
prod/master

git ブランチは次のようになります。

master
stage

私は単にローカル ステージ ブランチを会社/マスター ヘッドに向けようとしているだけだと思います。サーバー上のステージヘッドを更新するgit push company stageように見えますが、サイトがファイルを提供しているように見えるマスターヘッドを更新しようとしています。または、自分のサイトを会社/ステージ ヘッドに向ける方法を理解する必要があります。

ブランチを削除して、ブランチを作成してみました

git branch stage company/master

開始点が必要なものかもしれないと思ったので。

その後プッシュしようとすると、次のメッセージが表示されます。

error: failed to push some refs to 'root@foo:~repos/project_name'
To Prevent you from losing history, non-fasst-forward updates were rejected
Merge the remote changes (e.g. 'git    pull') before pushing again.)

を試してみましたgit pullが、すべてが最新であり、早送りのヘルプ ドキュメントに私の状況に対処するものは何も表示されませんでした。

4

1 に答える 1

6

まず、次のことを行うとどうなるかを説明する価値があります。

git push company stage

最後のパラメータは、実際にはrefspecです。これは、ソースrefと宛先refの間のマッピングを定義します。扱いそうな単純なケースでは、これらの「ref」はブランチ名です。refspecにがない場合:は、同じ名前のブランチにプッシュする必要があると見なされます。したがって、実行したコマンドは次と同等です。

git push company stage:stage

master代わりに、リポジトリ内のブランチを更新する場合は、次のcompanyことを行う必要があります。

git push company stage:master

次に、ブランチを削除して再作成した場合:

git branch stage company/master

stage...ローカルブランチをmasterリポジトリ内のブランチに関連付けるエントリをgitconfigに作成しますcompany。¹つまり、ブランチにいる場合stage、実行git pullは正しいことを行う必要があります。この場合は、リモート追跡ブランチを更新しcompany/master、それをにマージしstageます。

残念ながら(そして紛らわしいことに)、これらの構成オプションは(デフォルトでは)の動作に影響を与えません。git pushこれについては、他の場所で詳細に説明しましたgit push次に使用したコマンドの形式については言及していませんが、次のことを行う必要があります。

git push company stage:master

master...リポジトリ内のブランチをcompanyローカルブランチで更新する場合stage。(git push companyを試してみると、ローカルリポジトリとの間のすべての「一致する」ブランチをプッシュしようとしますcompany。「一致する」は「同じ名前のブランチがローカルおよびリモートに存在する」ことを意味します。この動作は、push.defaultconfigオプションを設定することで変更できます。にtracking。)


¹以前のバージョンのgitでは、--trackパラメーターを追加する必要がありましたが、しばらくの間、開始点がリモート追跡ブランチであるデフォルトでした。

于 2011-08-21T17:00:56.613 に答える