上游删除的文件显示为git diff中添加

时间:2019-03-25 15:48:57

标签: git

在GitHub的PR界面中,我可以看到我对分支所做的新更改,作为与master分支的区别。

我想从命令行获取这些文件的列表。

当我要针对的目标分支(例如master)上的文件被删除但我的分支不知道此更改时,出现了一个问题(在命令行上)。

  1. 创建git repo并将文件a添加到master
  2. add-b创建分支master并添加文件b。不要合并。
  3. 切换回master并删除a。提交。
  4. 切换回分支add-b并运行git diff --name-only --diff-filter=A master,它显示ab都已添加。

鉴于git checkout master && git merge add-b不会将文件a重新添加到仓库中,我知道一定有某种机制可以让git弄清楚这一点并想象有一个机制。气泡化此信息的方法。

我应该运行哪些命令以仅显示已添加/已修改的文件,并避免在目标分支上被删除的文件?


编辑-为清楚起见示例

• ~/src/git-testing $$$ git init
Initialized empty Git repository in /Users/ryan.tuck/src/git-testing/.git/
• ~/src/git-testing $$$ touch a && git add . && git commit -m 'add a'
[master (root-commit) f65661b] add a
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a
• ~/src/git-testing $$$ git checkout -b add-b
Switched to a new branch 'add-b'
• ~/src/git-testing $$$ touch b
• ~/src/git-testing $$$ git add . && git commit -m 'add b'
[add-b 588960f] add b
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 b
• ~/src/git-testing $$$ ls
a b
• ~/src/git-testing $$$ git checkout master
Switched to branch 'master'
• ~/src/git-testing $$$ ls
a
• ~/src/git-testing $$$ rm a && git add . && git commit -m 'remove a'
[master 2b4d9f8] remove a
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 a
• ~/src/git-testing $$$ ls
• ~/src/git-testing $$$ git checkout add-b
Switched to branch 'add-b'
• ~/src/git-testing $$$ git diff --name-only --diff-filter=A master
a
b

1 个答案:

答案 0 :(得分:2)

我认为您所问的内容没有任何魔术。 master没有文件,而add-b既有a又有b ....,因此必须添加这两个文件才能使diff变得有意义.....您在苦苦挣扎,因为您认为git在比较分支时是否以某种方式考虑a和b(文件)的历史记录?我认为情况并非如此。。。也许您想使用更像 diff的东西,因为两个分支都分开了?如果是这样,请尝试使用...:

git diff master...add-b

那应该只显示b的加法。