首页 > 解决方案 > 如何识别最近的拉取是否在目录中发生了变化

问题描述

我目前有一个结构如下的 git 项目:

z.txt
foo/a.txt
foo/b.txt

使用 bash 在运行后如何识别$ git pulla.txt/或b.txt(即foo目录下的任何内容)已被更改?

标签: bashgit

解决方案


A. 如果你已经拉

git diff

您可以使用git diff,特别是:

  • git diff commit1..commit2 --name-only; 或者
  • git diff commit1..commit2 --name-status

以下描述来自doco

--name-only

仅显示更改文件的名称。

--名称-状态

仅显示更改文件的名称和状态。有关状态字母的含义,请参阅 --diff-filter 选项的描述。


git pull告诉您它合并/快进的提交 ID:

/mnt/c/git/repo666 (develop)>git pull
Updating f86907f7a..a708dcfe8

在这种情况下,命令将是:

git diff f86907f7a..a708dcfe8 --name-status

git log

要查看每次提交的差异,您可以git log使用--name-onlyor --name-status

B. 拉动之前

如果您还没有拉动并且想要查看潜在的更改,您可以git fetch分支(不是pull)并比较当前分支的远程分支的本地副本。

/mnt/c/git/repo666(develop)>git fetch // not git pull
(...)
/mnt/c/git/repo666(develop)>git status
On branch develop
Your branch is behind 'origin/develop' by 3 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

nothing to commit, working tree clean
/mnt/c/git/Platform (develop)>git diff develop origin/develop --name-status

(请注意,我使用了git diff branch origin/branch而不是git diff origin/branch按照所需的顺序显示,即如果文件被添加,origin/develop我们希望看到它是添加的而不是删除的。)


git pull输出注意事项

请注意,git pull包含两次添加和重命名的文件的输出

Fast-forward
 ...
 src/Folder1/Services/File1.cs                                      |   30 +
 src/Folder1/Services/File2.cs                                      |    7 +
 ...
 src/Folder1/ViewModels/XViewModel.cs                               |    8 +-
 ...
 src/{Abc.Common/Services => Abc/Contracts/Area1}/Area1File1.cs     |    7 +-
 ...
 89 files changed, 7254 insertions(+), 4897 deletions(-)
 create mode 100644 src/Folder1/Services/File1.cs
 create mode 100644 src/Folder1/Services/File2.cs
 ...
 rename src/{Abc.Common/Services => Abc/Contracts/Area1}/Area1File1.cs (83%)
 ...

推荐阅读