0

私は Git を初めて使用するので、現在の状況を修正する方法がわかりません。

「マスター」リポジトリがありますA。次に、そのクローンを repository として作成しますB。どちらもたまたま同じマシン上にありますが、将来的にはそうではありません。AのリモコンですB

これに対する私の設計は、変更が に加えられAB単にアップストリームからプルして更新することです。B場合によっては、ローカルな変更が行われる場合があります。

問題は、誤って のB代わりに を変更したことですA。この変更の前は、両方のリポジトリは同一でした。この変更は、以前のコミットからいくつかのイメージを元に戻すこと (「元の」状態から「正しい」状態に戻すこと) でしたが、元に戻すことが重要であるという事実はないと思います。次に、間違ったレポで行ったことに気づき、元に戻したものを元に戻し(開始前にイメージを元の状態に設定)、代わりに「マスター」/アップストリームで変更を加えましたA

ここに画像の説明を入力

今、B元の画像が再びありA、新しく修正された画像があります。問題はB、それが よりも 2 つ前のリビジョンであるということですA。にプッシュするオプションを提供しますAが、そうするとエラーになります:

リモート: エラー: チェックアウトされたブランチの更新を拒否しています: refs/heads/master リモート: エラー: デフォルトでは、裸のリポジトリではない現在のブランチを更新しています リモート: エラー: インデックスと作業ツリーが矛盾するため、拒否されました
remote: error: プッシュした内容で、remote: error: HEAD への作業ツリーと一致させるには 'git reset --hard' が必要です。

remote: error: remote: error: 'receive.denyCurrentBranch' 構成変数を remote: error: 'ignore' または 'warn' に設定して、リモート リポジトリに push できるようにすることができます remote: error: 現在のブランチ。ただし、リモート: エラー: 何らかのリモート: エラー: 他の方法でプッシュしたものと一致するようにワーク ツリーを更新するように設定しない限り、これはお勧めできません。remote: error: remote: error: このメッセージを抑制し、デフォルトの動作を維持するには、remote: error: 'receive.denyCurrentBranch' 構成変数を 'refuse' に設定します。C:\dev\jenkins-1.501 へ! [リモート拒否] マスター -> マスター (ブランチは現在チェックアウトされています)

Bの「先」にならないようにするにはどうすればよいAですか? 本来あるべき状態になっAたので、単純に変更を に取り込みたいと思いますB

4

1 に答える 1

0

「変更をプルする」B(「新しいものを追加する」ことを意味する)代わりに、ブランチラベルが同じコミットを指すようにする必要がBありmasterますA

で行ったすべての変更を確実に削除したいのでB、これは簡単です。

ステップ 1、最新の状態にします (既に最新の状態になっている場合は何もしません):

B$ git fetch origin

ステップ2、あなたがマシンB上にいてブランチ上にいることなどを絶対に確認してくださいmaster

B$ hostname; git status # etc

ステップ 3: でB、現在のブランチ (つまりmaster) を と同じポイントに設定する必要があるorigin/mastermaster伝えAますfetch

B$ git reset --hard origin/master

(ちなみに、これはすべてコマンドラインです。実行している GUI では、基になる git リポジトリを強制的に再読み込みして変更を取得する必要がある場合があります。)

于 2013-09-11T23:25:53.747 に答える