我想编写一个脚本,保证Git结帐成功,而无需用户干预。我不介意在没有用户干预的情况下倾倒任何无法解决的问题:例如,未提交的更改。我确实希望保留明确忽略的文件(我认为这些是"在版本控制下#34;)。
我根据How do you discard unstaged changes in Git?答案的聚宝盆制作了一个脚本,并修复了我遇到的错误(与Unstaged changes left after git --reset hard和Ignoring “Your local changes to the following files would be overwritten by merge” on pull类似但不完全相同)。
我现在担心我的零碎脚本包含冗余,或者可能会缩短。以下任何一个呼叫都是多余的吗?
cd /SOME/FOLDER
git clean -df & git checkout .
git stash
git stash clear
git checkout SOME-BRANCH # or git checkout -B SOME-REMOTE SOME-BRANCH [1]
# possibly followed by a manual call to: git pull --rebase SOME-REMOTE
[1]这些来电可以是git checkout -f
和git checkout -fB
吗?
答案 0 :(得分:1)
这是我在我的一个构建脚本中使用的,以创建HEAD
的干净签出(用您想要的任何分支或提交替换HEAD
,或使用shell变量) :
if [ $(git status --porcelain -uall | wc -l) -gt 0 ]; then
echo "Creating pristine checkout of HEAD."
git reset --quiet --hard HEAD
git clean --quiet -fd
fi
if
子句检查是否有任何事情要做。如果你不关心它可能(甚至可能不会)带来的效率略有提高,你可以把它留下来。
如果您还要删除忽略规则(.gitignore
文件)中的文件,则需要将-x
选项提供给git-clean
,以及--ignored
的{{1}}选项;你提到你不希望这种情况发生。
我不认为你做的任何其他电话都是必要的。清除藏匿物不是必要的(但它也没有伤害)。