是否有一个我可以使用的Git命令,它将列出一个分支中存在的另一个分支中不存在的所有文件的名称?
背景:有人删除了一些历史记录,然后推送了origin/master.一些团队成员一直在说他们遗漏了一些文件.我想我已经使用我从diff命令创建的补丁恢复了丢失的文件.在删除历史记录并将我的补丁应用到新分支之后,我分支了master.现在,我想简单地看一下新分支中存在哪些文件在主分支的HEAD中不存在.现在我只想要文件名,无论内容如何,并且仅用于新分支中存在且在master的HEAD中不存在的文件.
我使用以下Git命令
git diff-tree --no-commit-id --name-only -r <SHA>
Run Code Online (Sandbox Code Playgroud)
获取已更改文件的列表.
不幸的是,列表没有指定每个文件的更改类型:添加,修改或删除等等
如何在特定提交的给定SHA中显示更改列表[更改类型,文件名].
有时,当您彻底更改文件时,会触发重写:
yes | head -256 > pa.txt
git add .
git commit -m qu
truncate -s128 pa.txt
yes n | head -64 >> pa.txt
git commit -am ro
Run Code Online (Sandbox Code Playgroud)
结果:
[master 79b5658] ro
1 file changed, 128 insertions(+), 256 deletions(-)
rewrite pa.txt (75%)
Run Code Online (Sandbox Code Playgroud)
但是,对于较小的更改,这不会发生:
yes | head -128 > pa.txt
git add .
git commit -m qu
truncate -s64 pa.txt
yes n | head -32 >> pa.txt
git commit -am ro
Run Code Online (Sandbox Code Playgroud)
结果:
[master 88ef937] ro
1 file changed, 32 insertions(+), 96 …Run Code Online (Sandbox Code Playgroud) 我希望能够看到在 jenkins 构建期间哪些文件在我的当前分支和主分支之间发生了变化。
在我的 jenkinsfile 中,我有以下代码。
git diff-tree -r --no-commit-id --name-only ${env.GIT_COMMIT} origin/master
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误
致命:模棱两可的参数“master”:未知版本或路径不在工作树中。
任何帮助将不胜感激..如果有人能告诉我我做错了什么或设计一个替代解决方案,它将为我提供已更改文件的文件路径,那就太好了。
仅供参考,上述命令在本地有效,但在 jenkins 中无效。
在两次测试提交中,第一个只有操作git mv file moved_file,第二个只有操作mv moved_file moved_again_file && git add -A moved_file moved_again_file,两者都在提交之前显示为重命名git status,但在git commit --verbose它们中显示为新文件和已删除文件。
我期望git diff-tree HEAD在每次提交后显示一个R(重命名)状态,但我不断得到两个: anA和 a D。
我正在尝试编写一个脚本,该脚本将根据文件状态执行操作,但如果它们始终显示为添加/删除,我无法正确规划R(或)状态。C
Git 的版本是 1.8.3.1(如果有区别的话)。