如何存储 "git pull" 的输出,不删除文件、数字和重复项,以在文本文件中列出新文件?

How to store an output of "git pull", without deleted files, numbers and duplications, for listing new files in a text file?

我主要使用 Fish 而不是 Bash 和 Zsh。我想输出一整fast-forwardgit pull从三月份到今天,但是只输出修改后的文件和新增的文件,没有增删改减,没有重复,列出一个新的图标文本文件,所以我会把错过的新图标复制到另一个分支。

例如:

git pull > new_icons.txt

我想用这些命令,但是我需要排除删除文件、重复项和增删改数的选项

git pull > new_icons.txt 2 > &1
git pull |& tee new_icons.txt
git pull &> new_icons.txt

如果你不知道什么是“增删改查数”,例如:

您可以看到 |、数字、+-。我想在文本文件中输出时排除它们。

重复的是什么?

例如:

February 7
Fast-forward
   icon.svg | 3+++

February 24
Fast-forward
   icon.svg | 2--

March 7
Fast-forward
   icon.svg | 1++

我只想输出一个唯一icon.svg.

我不确定我是否可以对 git pull 使用命令 fmt -1 | sort -z | uniq -cd | xargs echo,例如:

git pull |& fmt -1 | sort -z | uniq -cd | xargs echo |& tee new_icons.txt

git pull 的输出只是 git diff --stat 提交之间 before/after 拉动。

例如:运行 git diff --stat d649d3e f0c56e2,您应该会看到与屏幕截图中相同的输出。


找到你想要的根提交(你的仓库在三月份的状态),然后使用 git diff.

对于您的用例,git diff 还有其他有用的选项:

  • --name-status 将显示受影响文件的名称,前缀为 A,M or D(resp:添加、修改或删除)
  • --name-only 将显示文件名,没有更多信息
  • --diff-filter=[(A|M|D)] 将允许您仅显示与过滤器匹配的文件的信息

查看完整文档:git diff
(我简化了 diff-filtername-status 的描述,完整的文档可以找到 here and here

您要查找的列表是:

git diff --no-renames --diff-filter=AM --name-only [basecommit] [branch]

因为你想在其他分支上“应用补丁”,你可能还需要已删除文件的列表(删除它们......):

git diff --no-renames --diff-filter=D --name-only [basecommit] [branch]

以下列表有助于理解两次提交之间发生的事情:

git diff --name-status [basecommit] [branch]