我有一个分支,它已经将master合并了几次(以获得对该功能分支的最新错误修复).现在我想看看我在那个分支开始工作后所做的所有改变,所以我试过了git diff start_commit..HEAD.但是我注意到git也显示了那些合并的提交,所以这不是我想要的.
然后我尝试从该分支创建一个pull请求,看看是否同样适用于GitHub的pull请求,但是注意到pull请求只显示我想要的更改.
分支看起来像这样
master: A---B---C---D---E---F
\ \ \
feature: G---H---I---J---K---L
Run Code Online (Sandbox Code Playgroud)
问题是git diff A..L显示来自AL的所有提交,但是GitHub的pull请求只显示GL,这就是我想要的.
那么GitHub用来形成拉取请求的命令(或命令)是什么?
编辑:添加了图片
我在Git项目中有一个文件,某个特定值在某个时候被某人改变了; 我不知道是谁或何时.我想知道改变的时间,但我不确定如何在Git中跟踪它.
我尝试过使用git diff <sha1> <sha2>,但这显示了整个项目的差异,而我想检查一个特定的文件.
我有两个git repos,它们是彼此的分叉,我需要偶尔将提交从一个提交到另一个.
例如:
git-repo1 有这个目录结构:
repo1/project1/src
repo1/project2/src
while git-repo2具有以下目录结构:
repo2/src/
我想要做的是进行一系列提交并仅为改变特定子目录(例如repo1/project1/src)中的文件的提交生成补丁,并忽略所有仅在其他地方改变文件的提交.
或者,为所有提交生成修补程序,但仅在应用程序修改特定目录中的文件时应用修补程序.
我需要保留有关提交的元数据,因此使用git diff它似乎不是一个可行的选项.
forked git repos之间的目录结构不同.
有没有直接的方法来做到这一点?
UPDATE1
在处理不同的目录结构方面,我看到了这个问题(如何将git补丁从一个存储库应用到另一个存储库?)
但是,如果修补程序谈到修改根本不存在的文件会怎么样?我想忽略这些变化.
我正在使用GitHub for Windows客户端,现在它似乎表明即使diff是空的,也存在未经修改的更改.
我已经尝试提交空差异,但我仍然一遍又一遍地得到同样的东西.
我输入git status了Shell,这就是我得到的:
C:\Users\Nicholas\Documents\GitHub\Vesper.next [master +0 ~6 -0]> git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: LICENSE.txt
modified: README.md
modified: v.next/css/ext-styleNext.css
modified: v.next/js/ext-globalVariables.js
modified: v.next/js/modernizr.js
modified: v.next/js/numeric.js
no changes added to commit (use "git add" and/or "git commit -a")
C:\Users\Nicholas\Documents\GitHub\Vesper.next [master +0 ~6 -0]>
Run Code Online (Sandbox Code Playgroud)
这是输出git diff:
C:\Users\Nicholas\Documents\GitHub\Vesper.next [master +0 …Run Code Online (Sandbox Code Playgroud) 每当我运行时git diff,它会输出更改日志,并将选项卡转换为空格.是否有任何设置会强制git将这些字符原封不动地呈现在原始文件中?
git log --follow <myfile>显示git log一个文件.
我想在此文件中看到包含所有更改(差异)的日志.我尝试:
git log --full-diff --follow <myfile>
Run Code Online (Sandbox Code Playgroud)
但这失败了:
fatal: --follow requires exactly one pathspec
Run Code Online (Sandbox Code Playgroud)
为什么?我怎样才能得到我想要的差异?
或许,它是git中的错误吗?
有时,当您彻底更改文件时,会触发重写:
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) 我发现自己经常打字,就像我做了一些改变,提交它,然后要么查找我在那里做的事情以确定接下来要做什么,或者确保我没有添加任何意外的提交在将它推到遥控器之前.
不可否认,diff HEAD^ HEAD类型(git diTABHTAB←^ HTAB)足够快,但仍然觉得应该有更好的方法.
如何最简单地查看上次提交中所做的所有更改?
我希望能够将更改的内容与加密的内容进行比较config/credentials.yml.enc。
git diff仅显示加密文件内容的区别。我想看看明文的变化。
如何获得config/credentials.yml.enc文件的可读差异?
我想知道如何git diff将提供给xfuncname的表达式精确地应用于结果,以及是否有可能将对大块头文本的搜索委派给另一个程序。
上下文:我想为我更改xfuncname设置,git diff以显示xml文件的可用输出。如下所示的示例xml:
<layer1-1>
</layer1-1>
<layer1-2>
<layer2-1>
</layer2-1>
<layer2-2>
</layer2-2>
<layer2-3>
<layer3-1>
[...]
changes
[...]
</layer3-1>
<layer3-2>
</layer3-2>
<layer3-2>
</layer3-2>
</layer2-3>
</layer1-2>
<layer1-3>
</layer1-3>
Run Code Online (Sandbox Code Playgroud)
理想情况下,带有修改后的块头的输出看起来像这样
@@ -15 +15 @@ <layer1-2><layer2-3><layer3-1>
[...]
-notchanged
+changed
[...]
Run Code Online (Sandbox Code Playgroud)
我的观察结果表明,git diff将正则表达式应用于差异之前的文件部分,获取最后一个匹配项,并从第一个捕获组开始匹配;它使用m标志。这是一个合适的描述吗?
由于RE2显然既不支持反向引用,也不支持前瞻,所以我不确定通过这种方法是否可以归档我尝试执行的操作。有没有一种方法可以指定一个定制程序/脚本来接收diff作为输入,以便我自己指定一个大块头?
git ×10
git-diff ×10
blame ×1
credentials ×1
git-commit ×1
git-log ×1
git-patch ×1
github ×1
pull-request ×1
re2 ×1
regex ×1