我偶然發現了一個奇怪的現象,據我可以告訴可以可靠地使用這個劇本我寫轉載:國家和去除
#!/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配置)。如果我把我的提交散列在那裏,它不會在你的計算機上工作。 –