git文件与提交到分支的区别

git文件与提交到分支的区别,git,Git,尝试与jenkins合作,在提交和分支之间更改文件 我可以做类似的事情 git diff --name-status branchName..staging 如果我知道该分支机构,那么这是可行的,但是jenkins从github获得了一个PR请求,并做了一个 git checkout -f 0798a6d1ea9fbc658dc946018e88dff52bb64ed5 要从PR获得提交,则运行所有检查。我想知道git中是否有一种方法可以获取在提交到分支时更改的文件,或者从提交中获取分支名称

尝试与jenkins合作,在提交和分支之间更改文件

我可以做类似的事情

git diff --name-status branchName..staging
如果我知道该分支机构,那么这是可行的,但是jenkins从github获得了一个PR请求,并做了一个

git checkout -f 0798a6d1ea9fbc658dc946018e88dff52bb64ed5
要从PR获得提交,则运行所有检查。我想知道git中是否有一种方法可以获取在提交到分支时更改的文件,或者从提交中获取分支名称

# git branch -a --contains 0798a6d1ea9fbc658dc946018e88dff52bb64ed5
* (no branch)
remotes/origin/pr/19/merge
这会返回PR,所以不是我要找的

所以revparse给了我

$ git rev-parse branchName
branchName
fatal: ambiguous argument 'branchName': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
$git rev parse branchName
布兰奇纳姆
致命:参数“branchName”不明确:未知修订或路径不在工作树中。
使用“---”将路径与修订分开,如下所示:
'吉特[…]-[…]'

就git diff而言,分支就是提交。具体而言,分支名称解析为该分支上提示最多的提交的提交ID。你自己试试吧:

$ git rev-parse branchName
这应该打印类似于
0f8c3a1278c1…
(完整的40个字符的SHA-1)的内容。重复执行
staging
,然后将这两个原始提交ID馈送到您的
git diff

$ git diff --name-status 1234567 fedcba9 # use the correct IDs
(旁白:请注意,
git diff name1..name2
git diff name1 name2
相同。
diff
命令与大多数接受范围的git命令不同,它只是提取两个端点,而不是选择许多提交。我认为,如果将两个提交作为两个单独的参数提供,会更清楚。),这就是我为什么在上面这么做的原因。)

通常,在任何可以像这样使用原始提交ID的地方,都可以使用名称(分支或标记名),或相对引用,如
HEAD^
master~3
,等等。有关将git定向到特定SHA-1的所有不同方法,请参阅。这主要在两个方向上都有效:在可以使用分支名称的地方,可以使用原始提交ID


(有几个地方,包括
git checkout
,结果有点不同。特别是,如果给
checkout
一个原始提交ID,你会得到一个“分离的头”,而不是进入分支。不过,对于
git diff
,分支名称没有什么特别之处。)

我为rev parse添加了一个编辑。它不会在jenkins服务器上显示任何信息。哦,我想我知道你的困惑是从哪里来的。我假设你使用分支名称在repo上运行
git diff
,并建议你也在repo上运行
git rev parse
。一旦你有了原始ID,你就可以使用任何有提交的回购协议上的t ID。(这里的要点是名称可能会更改或消失,但原始SHA-1是永远的。)谢谢..这是有效的..但是当我将PRs合并到它时,用于暂存的提交ID将移动..詹金斯是需要做这项工作的人..我相信我能解决一些问题