3

私は 2 台の異なるマシンでマスター ブランチに取り組んでおり、そのうちの 1 台のリモート リポジトリにコードをプッシュしました。

他のマシンからリモート リポジトリにコードをプッシュしようとしていますが、エラーが発生します

 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to  'https://github.com/'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

私は計画を立ててい$ git pullますが、リモートリポジトリからの最後の git pull またはリモートリポジトリからの git push 以降にローカルに変更を加えたファイルが上書きされることを確認できる方法があるかどうかを知りたかったのです。

変更されたファイルの完全なリストには興味がありません。

4

3 に答える 3

0

まずgit fetch、リモート ブランチが最新であることを確認するために、必ず a を実行してください。次に、このワンライナーを使用して、コミットされていないファイルとリモートの違いを取得できます。

git status | grep "(modified|deleted)" | awk '{print $3}' | git diff <remote branch name>

このコマンドはgit status、変更されたファイルを取得して検索し、それらを解析して、ファイル名のみを持つようにします。最後に、それらのファイル名を使用してオリジンからの差分を作成します。

特定の変更の差分を調べる必要がありますが、これにより、コミットされていない変更に関する情報が得られます。

于 2013-08-20T13:50:37.083 に答える
0

これを行う git 内部の方法については知りません (ただし、それがあったことを知っても驚かないでしょう) が、(少なくともリモートの変更をフェッチした後) 次のようにする必要があると思います。 .

# Find merge base between the branch heads.
mb=$(git merge-base master origin/master)

# List of files changed by local master.
git diff --name-only $mb master

# List of files changed by origin/master.
git diff --name-only $mb origin/master

# List of files changed by both heads.
comm -1 -2 <(git diff --name-only $mb master) <(git diff --name-only $mb origin/master)

リモートブランチで変更されたファイルと重複するファイル (ローカルで変更されたファイルとコミットされていないファイル) を見つけるには、次を試してください。

# List of files locally changes (uncommitted).
git diff --name-only

# List of files changed in working directory and on remote branch.
comm -1 -2 <(git diff --name-only) <(git diff --name-only $mb origin/master)

ローカルに変更されたバージョンは、ローカルに追加されたファイルにフラグを立てないことに注意してください (git add -Nそれらについて git に伝えていない限り)。

于 2013-08-20T13:01:45.317 に答える