![](/img/trans.png)
[英]How to tell what files on remote repository changed since last git pull?
[英]How to tell what files would be over written by a git pull that I've changed since the last git pull or git push?
我正在兩台不同計算機上的master分支上工作,並將代碼推送到其中一台計算機上的遠程存儲庫中。
我正在嘗試將代碼從另一台計算機推送到遠程存儲庫,但出現錯誤
! [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
但是想知道是否有辦法告訴我自從上次從遠程repo進行git pull以來,還是在本地進行了git push之后,我對本地文件進行了更改。遠程回購。
我對已修改文件的完整列表不感興趣。
我不確定我是否真的了解您想要什么,所以我會列舉一些可能的情況和解決方案。
如果您想知道文件,則本地分支與遠程分支不同:
git diff --name-status master origin/master
如果您打算拉,但想知道將被修改的內容:
git pull --no-commit
git會給您留下合並的工作樹,您可以通過git status
類的命令檢查修改后的文件。
如果您想清除歷史記錄,我建議(也許您不打算這樣做)
git pull --rebase
它將從遠程獲取最新代碼並在其上應用本地更改。
我不知道執行此操作的任何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有關它們的信息)。
首先,請確保您執行git fetch
以便您知道遠程分支是最新的。 然后,您可以使用此一線來獲取未提交的文件和遠程文件之間的差異。
git status | grep "(modified|deleted)" | awk '{print $3}' | git diff <remote branch name>
此命令采用git status
並查找修改后的文件,對其進行解析,使其僅具有文件名。 最后,它使用這些文件名從源創建差異。
您將需要檢查差異的特定更改,但這會為您提供有關未提交的更改的信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.