如何告诉我自上次git pull或git push以来我改变了git pull会写什么文件?

时间:2013-08-20 12:44:29

标签: git

我正在两台不同的机器上处理主分支,并将代码推送到其中一台机器上的远程存储库。

我正在尝试将代码从其他计算机推送到远程仓库,但我收到错误

 ! [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从远程repo拉出来或从远程仓库推送git。

我对修改过的文件的完整列表不感兴趣。

3 个答案:

答案 0 :(得分:3)

我不确定我是否真的明白你想要什么,所以我会说出一些可能的情况和解决方案。

  1. 如果您想知道您的本地分支与远程对应文件不同的文件:

    git diff --name-status master origin/master
    
  2. 如果您打算拉,但想知道将要修改的内容:

    git pull --no-commit
    

    git将为您保留一个合并的工作树,您可以通过git status之类的命令检查已修改的文件。

  3. 如果你想创造一个干净的历史,我建议(也许不是你计划的)

    git pull --rebase
    

    它将从远程获取最新代码并在其上应用您的本地更改。

答案 1 :(得分: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它们)。

答案 2 :(得分:0)

首先确保您执行git fetch,以便了解您的远程分支是最新的。然后,您可以使用此单行程序来获取未提交文件和遥控器的差异。

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

此命令获取git status并查找已修改的文件,解析它们以使其仅具有文件名。最后,它使用这些文件名从原点创建一个diff。

您将不得不检查特定更改的差异,但这会获取有关未提交更改的信息。