输入:git repo目录和提交命令:如git commit -m "commit staged"
或git commit -a -m "comit all file"
或任何其他git commit ...
输出:此命令将在提交中添加的文件列表。
可能的解决方案:
通过以下方式获取暂存文件:git diff --cached --name-status
检查git commit
命令是否包含--all
标志
如果--all
:git diff --name-only
不获取暂存文件并获取此列表+暂存更改列表
如果没有--all
:只获取暂存更改列表
这个算法是否涵盖了git commit命令和repo状态的所有情况?
答案 0 :(得分:3)
您可以使用git status --porcelain
一次性获取工作目录和暂存区的完整状态。
$ git status --porcelain
A that
MM this
?? blah
第一列是暂存区的状态,第二列是工作目录的状态。上面说that
已添加到暂存区域,this
包含暂存和非暂停修改,blah
未跟踪。
这是同样的事情。
$ git status
On branch feature
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: that
modified: this
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: this
Untracked files:
(use "git add <file>..." to include in what will be committed)
blah
但我怀疑你真正想要的是能够在你提交之前审查会发生什么变化。在这种情况下,我建议你不要这样做。代替...
-m
。-v
。git commit --amend
修复任何错误。 git commit -m
是一个坏习惯。这意味着您的提交消息将是一行并且缺少详细信息。一个好的提交消息是这样的:
简要总结。
详情,详情,详情。
git commit -m
不鼓励这些,而且这些细节在未来很重要, ,你永远无法让他们回来 。值得花几秒钟。
更重要的是,一个定期的git commit
拉出一个编辑器已经向你展示了将会发生什么。
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch feature
# Changes to be committed:
# new file: that
# modified: this
#
# Changes not staged for commit:
# modified: this
#
# Untracked files:
# blah
#
更好的是,如果您使用git commit -v
,您将获得完整的差异进行审核。我经常使用它,我将其别名为git ci
(签入)。
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch feature
# Changes to be committed:
# new file: that
# modified: this
#
# Changes not staged for commit:
# modified: this
#
# Untracked files:
# blah
#
# ------------------------ >8 ------------------------
# Do not touch the line above.
# Everything below will be removed.
diff --git a/that b/that
new file mode 100644
index 0000000..e69de29
diff --git a/this b/this
index 73e4f83..f129e32 100644
--- a/this
+++ b/this
@@ -4,3 +4,5 @@ fix
1
2
3
+4
+
最后,与其他版本控制系统不同,Git中的提交不会立即共享。在您git push
之前,一切都是本地的。这意味着如果你在提交中犯了错误,你可以快速修复它。只需进行修复,git commit --amend
即可更新最后一次提交。
因此,不要添加一堆图层来防止自己蠢蠢欲动,而只需修复傻瓜。这就是版本控制之美!
答案 1 :(得分:0)
如果您使用上面建议的git commit -v
来查看修改过的文件列表,请注意该列表之前的行将随Git 2.14.x / 2.15(2017年第4季度)而变化。
提交日志编辑器中对剪切线的解释是 稍微调整一下。
commit 8c4b1a3见Kaartic Sivaraam (sivaraam
)(2017年9月13日)
帮助:Jeff King (peff
)。
(Junio C Hamano -- gitster
--合并于commit 77f4539,2017年9月25日)
commit-template
:将消息更改为更直观使用短语&#39;
do not touch
&#39;这样做并不好传达不应修改或删除切割线的信息,因为它可能会被一个不知道“触摸”字样的人误解。具有&#39;篡改&#39;的含义 此外,它可能使翻译有点困难,因为它在翻译时可能没有几种语言的预期含义。所以,在句子中使用更直观的术语。
所以而不是
Do not touch the line above.
Everything below will be removed.
你将拥有:
Do not modify or remove the line above.
Everything below it will be ignored.