我偶然发现了一个奇怪的现象,据我可以告诉可以可靠地使用这个剧本我写转载:国家和去除
#!/bin/bash
rm -Rf repo
mkdir repo
cd repo
git init
mkdir folder
echo a > folder/a
echo b > folder/b
git add .
git commit -m "First commit."
rm folder/b
echo c > folder/c
git add .
git commit -m "Second commit."
cd folder
git checkout `git log --pretty=format:%H | tail -1` .
echo "###################################################################"
git status
echo "###################################################################"
rm *
git checkout `git log --pretty=format:%H | head -1` .
echo "###################################################################"
git status
echo "###################################################################"
git add .
echo "###################################################################"
git status
echo "###################################################################"
的哈希值是只是更容易查看一个git status
结束,另一个开始。我把它放在引擎收录,所以我们可以参考行号更容易:https://pastebin.com/z8GgDpfw
它的输出是:
$ ./script.sh Initialized empty Git repository in /[...]/repo/.git/
[master (root-commit) 165986a] First commit.
2 files changed, 2 insertions(+)
create mode 100644 folder/a
create mode 100644 folder/b
[master 241e479] Second commit.
2 files changed, 1 insertion(+), 1 deletion(-)
delete mode 100644 folder/b
create mode 100644 folder/c
###################################################################
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: b
###################################################################
###################################################################
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: b
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: b
###################################################################
###################################################################
On branch master
nothing to commit, working directory clean
###################################################################
b
如图同时添加和无缘无故删除:这是完全一样的在回购,索引和工作树中。 git add .
魔法清理git status
。
这是预期的行为?如果是这样:为什么?为什么不只显示一个干净的git status
而不需要git add .
必须先执行?
您是否可以缩短命令以仅显示相关的输出,即文件既存在又被删除的部分?另外,你介意写一切都明确(没有反引号)吗? – AnoE
@AnoE最好有完整的命令来重现问题。它帮助我非常了解发生了什么。 – Schwern
@AnoE大部分的输出都显示了这一点。 backtick命令找出提交ID。这些在脚本的每次执行上都不同,因为这些执行发生在不同的时间,并且具有其中不同人的姓名和电子邮件地址(取决于运行的计算机的git配置)。如果我把我的提交散列在那里,它不会在你的计算机上工作。 –