我想将git存储库中的单个文件签出到不同的位置(除了工作目录)并保留当前正在工作的目录.我希望git以正确的行结尾检查我的文件.
我在Windows上工作,但我在Linux中也有同样的问题.
这是我的场景(Win7 64位):
首先,我确保git在提交时将CRLF转换为LF,在结帐时将LF转换为CRLF:
git config --local core.autocrlf true
Run Code Online (Sandbox Code Playgroud)
然后我创建一个名为crlf.txt的文件,其中包含CRLF行结尾并提交它:
git add crlf.txt
git commit -m "File with crlf"
Run Code Online (Sandbox Code Playgroud)
我在crlf.txt中更改了一些内容并提交它:
git add crlf.txt
git commit -m "Change in crlf.txt"
Run Code Online (Sandbox Code Playgroud)
现在我想得到像第一次提交时的crlf.txt:
git show HEAD~1:crlf.txt > "/home/user/crlf_like_in_head-1.txt"
Run Code Online (Sandbox Code Playgroud)
文件"crlf_like_in_head-1.txt"不包含CRLF而是LF.我认为git show是正确的,因为它显示了文件内容,就像它在存储库中一样(core.autocrlf = true将CRLF转换为LF).我知道从文档中我尝试使用core.autocrlf = false.使用core.autocrlf = false"crlf_like_in_head-1.txt"包含CRLF.我知道我可以轻松地将LF转换为CRLF,但我必须确保结果文件与使用git检出的结果文件相同.
我知道我也可以使用git checkout签出一个文件:
git checkout HEAD~1 crlf.txt
Run Code Online (Sandbox Code Playgroud)
但它覆盖了工作目录中crlf.txt的当前内容(如果crlf.txt处于脏状态),我也无法通过git checkout将其签出到另一个文件夹.
git show filename显示差异,同时
git show branch:path/to/filename显示文件的内容。
我查看了帮助(git show --help),我的理解是它应该默认为 HEAD,即git show HEAD:filename.
但这会产生我预期的文件内容。有人有任何见解吗?
我刚开始接触 VC,尤其是 git。我知道基本命令,git add/commit/remote但很难理解输出:
$ git show f27d852
commit f27d852fc750a9c3f71eaf0acf586164b76faddf
Author: myusername <myemail@gmail.com>
Date: Tue Jun 28 22:59:35 2016 +0530
changed color to a different color
diff --git a/css/business-casual.css b/css/business-casual.css
index bbd44d7..ee1765e 100644
--- a/css/business-casual.css
+++ b/css/business-casual.css
@@ -194,5 +194,5 @@ footer p {
/* CUSTOM CSS - BY ME */
.brand {
- color: #ff0000;
- }
\ No newline at end of file
+ color: #ffdd000;
+ }
Run Code Online (Sandbox Code Playgroud)
每行是什么意思?如何阅读它。谁能解释一下?
谢谢dk
我喜欢我的标签显示为 4 个空格,为此我有首选项core.pager = 'less -x4'.
我知道此时我在吹毛求疵,但即使在差异模式下,我也希望前导标签为 4 个空格,这显然是最常用的 - 但是由于前导+, -,它仅显示为 3或。由于对齐的行,这有点烦人,如果有些没有前导选项卡,与其他人相比,它们会移动 1 列。
我可以更正差异的显示,less -x1,5以获得 4 个空格的选项卡,在列 1 模 4 上对齐。但是,此选项会导致前导选项卡在非差异模式下显示为 1 列,这反过来又非常令人不安。
因此,对于两个具体示例,我如何设置 git 选项以便我使用:
less -x1,5对于差异(或真正的补丁显示)命令,例如git diff或git show HEADless -x4 对于不显示差异的命令,例如 git show HEAD~1:package.json我确信必须有一个不同的渲染器来处理基本diff和cat操作,但我无法找到这些特定的选项(尽管它们可能存在,但关于 git 主题有很多噪音)。我也不想写一大堆别名,这有点太脏了。那么这甚至可能吗?
我知道您可以使用gitrevisions(1) 中记录的:/<text>-syntax选择修订版,例如
git show :/"new change"
Run Code Online (Sandbox Code Playgroud)
将在提交消息中显示带有“新更改”的(最年轻的可到达的)提交。
我也经常在特定版本中使用该功能来处理git showblob,例如
git show myBranch:./coolFile.csv
Run Code Online (Sandbox Code Playgroud)
在修订状态下查看coolFile.csv(以我的相对路径)的全部内容。 myBranch
现在我的问题是:我可以使用:/<text>语法选择一个修订版,然后在该修订版中显示一个斑点吗?我努力了
git show (:/"new change"):./coolFile.csv
git show :/"new change":./coolFile.csv
Run Code Online (Sandbox Code Playgroud)
这引发了错误
致命:不明确的参数':/新更改:./coolFile.csv':未知修订版或路径不在工作树中。
使用“--”将路径与修订版分开,如下所示:
“git [<revision>...] -- [<file>...]”
所以我尝试了
git show :/"new change" -- ./coolFile.csv
Run Code Online (Sandbox Code Playgroud)
它什么也不打印,因为该语法只打印该文件中该修订版的更改。
有没有办法让git show命令在查看提交时显示文件的全部内容?例如:如果它当前显示类似的东西
foo.cpp
+++ int main() {
+++ std::cout << "HELLO" << std::endl;
+++ }
Run Code Online (Sandbox Code Playgroud)
我希望输出说:
foo.cpp
#include <stdio> //assuming this was from an earlier commit
+++ int main() {
+++ std::cout << "HELLO" << std::endl;
+++ }
Run Code Online (Sandbox Code Playgroud)
有一个简单的方法吗?
我正在审查一个非常旧的提交.我希望看到特定提交所做的更改,但我想在完整的上下文中看到它,即我想查看整个文件以及该人所做的更改.以下命令,
git show -w <commit-id>
Run Code Online (Sandbox Code Playgroud)
没有向我展示完整的背景.有什么建议吗?
我想列出另一个分支中存在的文件而不进行检出,并且根据在不同的 Git 分支中查看文件而不更改分支,这个命令就足够了:
git show mybranch:mydir
Run Code Online (Sandbox Code Playgroud)
不幸的是,输出并不理想,因为完全没有必要tree mybranch:mydir:
tree mybranch:mydir
.gitignore
Makefile
README
Run Code Online (Sandbox Code Playgroud)
如何在不获取任何额外信息的情况下列出另一个分支中的文件(例如tree mybranch:mydir)?
我可以做,git show <some-commit>:path/to/some/file但是我要替换什么<some-commit>才能获得文件的当前暂存版本?
上下文:我正在编写一个预提交钩子,我想对暂存文件进行检查,而不是诉诸于隐藏未暂存的更改。有没有更好的办法?