0

フォークされたリポジトリにいくつかの変更を加えました。アップストリームから 1 つのファイルを上書きしたいと考えています。アップストリーム リポジトリがリモートとして追加されます。マージを実行すると、git は最新の状態であると通知します。

$ git merge upstream/master master
Already up-to-date.

しかし、diff を実行すると、git はフォークされたリポジトリの不足しているファイルを表示します

$ git diff upstream/master origin
diff --git a/Library/Formula/exim.rb b/Library/Formula/exim.rb
deleted file mode 100644
index 48d52cf..0000000
--- a/Library/Formula/exim.rb

不足しているファイルをフォークされたリポジトリに追加するように git を取得する方法はありますか?

4

4 に答える 4

2

アップストリームにはファイルがあります。あなたは上流からそれを持っていて、それを削除しました。変更なしと削除の 3 方向マージは削除であるため、マージ後もファイルは存在しません。が完全にマージされるupstream/masterと (最初にリストされた出力の場合)、マージはブランチが最後にマージされてからの変更のみを考慮し、反対側には何もないため、再度のマージは不要です。

次のいずれかを行います。

  • ファイルを削除した変更を元に戻します。

    git log -- Library/Formula/exim.rb
    

    ファイルを削除したリビジョンを教えてくれます。

    git revert <revision-id>
    

    元に戻すには。

  • アップストリームからファイルのコンテンツを取得し、再度追加します。

    git cat-file blob upstream/master:Library/Formula/exim.rb > Library/Formula/exim.rb
    git add Library/Formula/exim.rb
    git commit
    
于 2013-09-30T15:02:42.977 に答える
1

と比較upstream/masterしていますorigin/masterが、 にマージupstream/masterしていmasterます。upstreamレポ (GitHub の元のレポ) とorigin(GitHub のフォークされたレポ) を混同しているようです。

変更をマージしたら、それらはまだローカルです。変更を表示したい場合は、それらoriginをプッシュする必要があります: git push origin master

グラフィカルに、最初にこの状況があります。

A----B 
\    ^master and origin/master
 \---C 
     ^upstream/master

マージ後:

A----B-----------------D
\    ^origin/master   /^master
 \---C---------------/ 
     ^upstream/master

そしてプッシュバックした後origin

A----B-----------------D
\    ^                /^master and origin/master
 \---C---------------/ 
     ^upstream/master
于 2013-09-30T14:34:10.697 に答える