我有一个 Git 预提交钩子,它会去除空格并将修改后的文件保留在工作副本中,这样它就不会踩踏像git add -p.
如果我提交多个已更改文件中的一个,并且更正了空格,则我会在工作副本中更改两个文件和一个暂存文件(该文件也在工作副本中,但暂存更改存在空格错误):
vi fileWithBadWS.txt # leave bad whitespace
vi fileWithGoodWS.txt # don't leave bad whitespace
vi unrelatedFile.txt
git add fileWithBadWS.txt fileWithGoodWS.txt
git commit -m "Commited files, one with bad whitespace" # pre-commit hook fails
Run Code Online (Sandbox Code Playgroud)
仓库现在看起来像这样:
On branch master
Changes to be committed:
modified: fileWithBadWS.txt # bad WS
modified: fileWithGoodWS.txt
Changes not staged for commit:
modified: fileWithBadWS.txt # fixed WS
modified: unrelatedFile.txt
Run Code Online (Sandbox Code Playgroud)
我可以用:
git diff去看fileWithBadWS.txt并且unrelatedFile.txtgit diff --cached查看暂存文件fileWithBadWS.txt和 …目前我正在获取最新的,然后运行git status并解析输出,Your branch is up to date with 'origin/master'但这感觉就像一个黑客。
我已经研究过使用,git status --porcelain但这仅包括在系统上所做的文件更改,而不是在远程所做的更改。我不在乎实际进行了哪些更改,我只想知道是否存在任何更改(本地或远程)。
我将如何干净地实现这一目标?
我通常通过“git diff commit^!”来检查提交的内容。但是,当我将其应用于初始提交时,我随后看到了来自不同提交的更改的混合,而我认为它应该是提交的初始副本。有人可以帮助我从语义上理解它吗?
顺便说一句,我知道如何显示stackoverflow 问题 40883798中 init 提交的差异有很好的答案。
我有以下问题。我想从 获取输出git diff,但对于所有未提交的本地更改(这意味着未暂存和暂存的文件)。
我不是在搜索 git log 或任何其他输出,它必须被git diff输出,因为然后我用我制作的解析器解析它。
现在我有:
所有未暂存的文件:
git diff
Run Code Online (Sandbox Code Playgroud)
暂存 + 未暂存文件 + 所有本地提交(与远程相比)
git diff origin/master
Run Code Online (Sandbox Code Playgroud)
现在,我错过了可以获取git diff所有未暂存和已暂存文件的部分,但不将其与远程进行比较(因为它也需要所有本地提交),而只是将其与上次本地提交进行比较。有没有办法做到这一点?
我们的项目使用 git子模块来固定我们的库依赖项之一。
我们定期rebase将子模块跟踪上游更改,并且我们在它上面还有一组我们不能轻易上游的提交。
当有人重新设置子模块时,我只git diff在父存储库中看到这一点:
--- a/mysubmodule
+++ b/mysubmodule
@@ -1 +1 @@
-Subproject commit abc12345abc12345abc12345abcd12345abc1234
+Subproject commit efg67890efg67890efg67890efg67890efg67890
Run Code Online (Sandbox Code Playgroud)
那不是很有用。当我git diff在子模块中提交这些提交时,我会得到很多输出,包括所有上游更改,我们的提交位于顶部。我无法轻易判断对我们自己的提交执行的某些冲突解决是否引入了一些错误。
如何有效地对子模块的更改进行代码审查?
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/lab_master
remotes/origin/master
$ git checkout lab_master
error: Your local changes to the following files would be overwritten by checkou t:
**project.properties**
Please, commit your changes or stash them before you can switch branches.
Aborting
Run Code Online (Sandbox Code Playgroud)
为什么我只是没有结账lab_master分支?
另一个问题:为什么我无法将当前文件与另一个分支中的文件进行比较?
$ git diff project.properties -b lab_master
fatal: bad flag '-b' used after filename
Run Code Online (Sandbox Code Playgroud) 是否有一个可以突出显示单个字符编辑的差异工具,而不仅仅是显示整行的旧版本和新版本(即差异StackExchange显示您对帖子进行编辑的那种)?
我更喜欢在Linux命令行diff中使用的一个git.
我有一个名为的分支feature_219,它是master不久前创建的。自转移以来,两个分支上的许多文件都发生了变化。
现在我试图找出feature_219仅在分支上工作时更改了哪些文件。
在做了一些研究之后,我发现这git diff --name-only master feature_219可能会有所帮助,但结果是这个命令告诉了两个分支中不同的所有文件。我试图用这个命令寻找一些选项,但没有任何效果。
有没有办法只列出那些在feature_219分支中更改的文件?
如何获得日志列表以及每个提交的差异,
即:
commit1
Author
Date
Commit message
changes between commit1 and commit2
commit2
Author
Date
Commit message
changes between commit2 and commit3
...
Run Code Online (Sandbox Code Playgroud)
使用
git log /some/file
提供更改某些/文件的提交列表
即:
commit1
Author
Date
Commit message
commit2
Author
Date
Commit message
...
Run Code Online (Sandbox Code Playgroud)
但是,不会显示每个提交中的更改
使用
git diff hash1..hash2 /some/file
在这两个提交之间给出/ some/file中的更改.
但只在这两个提交之间,而不是通过所有提交改变/ some/file
我更喜欢meld用作差异工具。但是它没有快速解决所有简单冲突的选项,所以在合并的情况下我想使用 kdiff3
我已经设置merge.tool为 kdiff3 并diff.guitool融合但git difftool仍然总是运行 kdiff3
[merge]
tool = kdiff3
conflictstyle = diff3
[diff]
guitool = meld
renames = copies
mnemonicPrefix = true
[difftool]
prompt = false
Run Code Online (Sandbox Code Playgroud)
如何git difftool运行meld?
git-diff ×10
git ×9
diff ×2
git-branch ×2
difftool ×1
git-checkout ×1
git-index ×1
git-log ×1
git-remote ×1
git-status ×1
mergetool ×1
parsing ×1