默认情况下,Git 并不跟踪空目录,如果想提交一个空目录,要怎么办呢,
在项目目录下添加 .gitkeep
文件,把空目录名称加上,用法跟 .gitignore
一样
在已有项目中我们想新增一个忽略文件,这个时候只在.gitignore中添加是无效的,.gitignore 只能忽略那些原来没有被 track 的文件,解决方法就是先把本地缓存删除(改变成未 track 状态),然后再提交。
# 如果是文件夹,记得加 -r 参数
git rm -r --cached filepath
git add .
git commit -m 'update .gitignore'
git push origin master
在本地提交之后,又做了一个小改动,又需要再提交一次?不需要,可以追加到上次提交中,这样就可以避免两次提交
# 追加到上一次提交
git commit --amend
# 如果已经push到远程了, 强制推送
git push -f origin master:master
Git 维护着一个检查点列表,可以使用 reflog 访问这些检查点。
使用 reflog 我们就可以撤销合并、恢复丢失的提交或分支等等。
我们在一个分支工作时,突然要修复其它分支的bug,又不想去提交没完成的代码,可以使用git stash将代码暂存起来,修复完bug再接着工作。
# 存储当前未提交的代码,添加备注,方便查找,只使用git stash 也是可以的,但查找时不方便识别。
git stash save "save message"
# 查看stash了哪些存储
git stash list
# 显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num}
git stash show
git stash show stash@{1} # show第二个存储
# 应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num}
git stash apply
git stash apply stash@{1} # apply第二个存储
# 命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0}
git stash pop
git stash pop stash@{1} # pop第二个存储
# 丢弃stash@{$num}存储,从列表中删除这个存储
git stash drop stash@{$num}
# 删除所有缓存的stash
git stash clear
在使用git reset --hard
时要慎重
# --mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。「把所有差异都混合(mixed)放在工作目录中」
git reset HEAD^
# --soft 参数会保留工作目录的内容,并把因为保留工作目录内容所带来的新的文件差异放进暂存区。
git reset --soft HEAD^
# --hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交
git reset --hard HEAD^
查看原文:6个Git实用技巧,让你事半功倍?