在GitHub的PR界面中,我可以看到我对分支所做的新更改,作为与master分支的区别。
我想从命令行获取这些文件的列表。
当我要针对的目标分支(例如master
)上的文件被删除但我的分支不知道此更改时,出现了一个问题(在命令行上)。
a
添加到master
。add-b
创建分支master
并添加文件b
。不要合并。master
并删除a
。提交。add-b
并运行git diff --name-only --diff-filter=A master
,它显示a
和b
都已添加。鉴于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
答案 0 :(得分:2)
我认为您所问的内容没有任何魔术。 master没有文件,而add-b既有a又有b ....,因此必须添加这两个文件才能使diff变得有意义.....您在苦苦挣扎,因为您认为git在比较分支时是否以某种方式考虑a和b(文件)的历史记录?我认为情况并非如此。。。也许您想使用更像 diff的东西,因为两个分支都分开了?如果是这样,请尝试使用...:
git diff master...add-b
那应该只显示b的加法。