如何查看将要提交的文件
how to see the file which would be committed
我已经修改了目录中的一个文件(或一些文件),并且我已经使用 git add
暂存文件中的一些更改行,但不是所有更改的行。
我可以使用 git diff --staged my-file
查看更改的差异。 git diff --staged my-file
忽略已更改但未暂存的行。这是 git diff --staged my-file
的输出示例
diff --git a/ens/cours/ens_cours_JN.csv b/ens/cours/ens_cours_JN.csv
index dcea574..ff33469 100644
--- a/ens/cours/ens_cours_JN.csv
+++ b/ens/cours/ens_cours_JN.csv
@@ -24,6 +24,7 @@ SCALIN_E;EPITA;préparation pédagogique;JN;ING1;2020-05-13;;False;True;PT4H;;
SCALIN_E;EPITA;préparation pédagogique;JN;ING1;2020-05-20;;False;True;PT4H;;
SCALIN_E;EPITA;préparation pédagogique;JN;ING1;2020-05-27;;False;True;PT4H;;
SCALIN_E;EPITA;préparation pédagogique;JN;ING1;2020-06-03;;False;True;PT4H;;
+SCALIN_E;EPITA;préparation pédagogique;JN;ING1;2020-06-03;;False;True;PT4H;;commit this line
THLR;EPITA;préparation pédagogique;JN;ING1;2020-07-20;;False;True;PT8H;;Recording TDs
THLR;EPITA;préparation pédagogique;JN;ING1;2020-07-21;;False;True;PT8H;;Recording TDs
THLR;EPITA;préparation pédagogique;JN;ING1;2020-07-22;;False;True;PT8H;;Recording TDs
问题:如何生成 将 提交的文件的文本?我想要一个签入挂钩,以便在允许提交之前最终处理该文件。
我怀疑有一些简单的咒语使用 git apply
。但是,简单使用 git apply
会产生以下诊断消息。
jnewton@Marcello cours % git diff --staged > ens_cours_JN.csv.patch
git diff --staged > ens_cours_JN.csv.patch
jnewton@Marcello cours % git apply ens_cours_JN.csv.patch
git apply ens_cours_JN.csv.patch
error: patch failed: ens/cours/ens_cours_JN.csv:24
error: ens/cours/ens_cours_JN.csv: patch does not apply
我有一个看起来太复杂的解决方案。
- 使用
git diff --staged > my-file.patch
生成 .patch 文件
- 用
cp my-file my-file.save
保存原件
- 使用
git stash save my-file
存储更改
- 使用
git apply my-file.patch
应用补丁
- 用
cp my-file my-file.to-commit
保存了想要的结果
- 使用
mv my-file.save my-file
将文件恢复到添加前的状态
- 使用
git stash apply
将字段恢复到post-添加状态
现在,my file.to-commit
是将提交的填充副本。
这真的是正确的方法吗?看来我做的太多了。
您可以利用 :[<n>:]<path>
构造来访问相应的暂存 blob,只需执行
git show :my-file
如所述here:
:[<n>:]<path>, e.g. :0:README, :README
A colon, optionally followed by a stage number (0 to 3) and a colon, followed by a path, names a blob object in the index at the given path. A missing stage number (and the colon that follows it) names a stage 0 entry. During a merge, stage 1 is the common ancestor, stage 2 is the target branch’s version (typically the current branch), and stage 3 is the version from the branch which is being merged.
因此 git show :0:path/to/file
或更短的 git show :path/to/file
输出文件的完整暂存版本。
对于单个文件,您可以使用 git checkout-index
:
# will overwrite 'that/file.txt' in place with the indexed version :
git checkout-index -- that/file.txt
# will create '/tmp/that/file.txt' :
git checkout-index --prefix=/tmp/ -- that/file.txt
或者您可以明确提及目标 --work-tree
and --git-dir
(git
本身的选项,而不是其子命令),然后使用 git checkout
:
git --git-dir=.git/ --work-tree=/tmp/myindex/ checkout -- .
还值得一提:
git stash -k
会将您未暂存的更改存储在存储中,按原样保留索引并将磁盘上的内容恢复为索引内容
然后,您可以使用 git stash apply
或 git stash pop
恢复未暂存的更改
git checkout -- some/path
将从磁盘上的 index 获取版本(它将覆盖您的本地更改,使用 git stash -k
或其他方式检查您的文件,如果这是一个问题)
我已经修改了目录中的一个文件(或一些文件),并且我已经使用 git add
暂存文件中的一些更改行,但不是所有更改的行。
我可以使用 git diff --staged my-file
查看更改的差异。 git diff --staged my-file
忽略已更改但未暂存的行。这是 git diff --staged my-file
diff --git a/ens/cours/ens_cours_JN.csv b/ens/cours/ens_cours_JN.csv
index dcea574..ff33469 100644
--- a/ens/cours/ens_cours_JN.csv
+++ b/ens/cours/ens_cours_JN.csv
@@ -24,6 +24,7 @@ SCALIN_E;EPITA;préparation pédagogique;JN;ING1;2020-05-13;;False;True;PT4H;;
SCALIN_E;EPITA;préparation pédagogique;JN;ING1;2020-05-20;;False;True;PT4H;;
SCALIN_E;EPITA;préparation pédagogique;JN;ING1;2020-05-27;;False;True;PT4H;;
SCALIN_E;EPITA;préparation pédagogique;JN;ING1;2020-06-03;;False;True;PT4H;;
+SCALIN_E;EPITA;préparation pédagogique;JN;ING1;2020-06-03;;False;True;PT4H;;commit this line
THLR;EPITA;préparation pédagogique;JN;ING1;2020-07-20;;False;True;PT8H;;Recording TDs
THLR;EPITA;préparation pédagogique;JN;ING1;2020-07-21;;False;True;PT8H;;Recording TDs
THLR;EPITA;préparation pédagogique;JN;ING1;2020-07-22;;False;True;PT8H;;Recording TDs
问题:如何生成 将 提交的文件的文本?我想要一个签入挂钩,以便在允许提交之前最终处理该文件。
我怀疑有一些简单的咒语使用 git apply
。但是,简单使用 git apply
会产生以下诊断消息。
jnewton@Marcello cours % git diff --staged > ens_cours_JN.csv.patch
git diff --staged > ens_cours_JN.csv.patch
jnewton@Marcello cours % git apply ens_cours_JN.csv.patch
git apply ens_cours_JN.csv.patch
error: patch failed: ens/cours/ens_cours_JN.csv:24
error: ens/cours/ens_cours_JN.csv: patch does not apply
我有一个看起来太复杂的解决方案。
- 使用
git diff --staged > my-file.patch
生成 .patch 文件
- 用
cp my-file my-file.save
保存原件
- 使用
git stash save my-file
存储更改
- 使用
git apply my-file.patch
应用补丁
- 用
cp my-file my-file.to-commit
保存了想要的结果
- 使用
mv my-file.save my-file
将文件恢复到添加前的状态
- 使用
git stash apply
将字段恢复到post-添加状态
现在,my file.to-commit
是将提交的填充副本。
这真的是正确的方法吗?看来我做的太多了。
您可以利用 :[<n>:]<path>
构造来访问相应的暂存 blob,只需执行
git show :my-file
如所述here:
:[<n>:]<path>, e.g. :0:README, :README
A colon, optionally followed by a stage number (0 to 3) and a colon, followed by a path, names a blob object in the index at the given path. A missing stage number (and the colon that follows it) names a stage 0 entry. During a merge, stage 1 is the common ancestor, stage 2 is the target branch’s version (typically the current branch), and stage 3 is the version from the branch which is being merged.
因此 git show :0:path/to/file
或更短的 git show :path/to/file
输出文件的完整暂存版本。
对于单个文件,您可以使用 git checkout-index
:
# will overwrite 'that/file.txt' in place with the indexed version :
git checkout-index -- that/file.txt
# will create '/tmp/that/file.txt' :
git checkout-index --prefix=/tmp/ -- that/file.txt
或者您可以明确提及目标 --work-tree
and --git-dir
(git
本身的选项,而不是其子命令),然后使用 git checkout
:
git --git-dir=.git/ --work-tree=/tmp/myindex/ checkout -- .
还值得一提:
git stash -k
会将您未暂存的更改存储在存储中,按原样保留索引并将磁盘上的内容恢复为索引内容
然后,您可以使用git stash apply
或git stash pop
恢复未暂存的更改git checkout -- some/path
将从磁盘上的 index 获取版本(它将覆盖您的本地更改,使用git stash -k
或其他方式检查您的文件,如果这是一个问题)