Git个人配置偏好记录以及注意事项
日志格式
git config --global alias.ls 'log --graph --pretty=format:"\#hash (%h) \#author <%an> \#time <%ar> \#message \"%s\""'
git config --global alias.ls "log --graph --pretty=format:'%C(red)#hash (%h)%Creset %C(yellow)#author <%an>%Creset %C(green)#time <%ar>%Creset %C(cyan)#message \"%s\"%Creset %C(blue)%d%Creset' --abbrev-commit"
GNU 工具 for Windows
Tree
1. put the binary exe in the folder of C:\Program Files\Git\usr\bin
2. reboot your gitbash
https://gnuwin32.sourceforge.net/packages/tree.htm
注意事项
- 1似乎.gitignore 要git add .gitignore之后才会生效,而且不用进一步commit
- git rm <file_name> --cached #逻辑上remove
- 生效的.gitignore哪怕逻辑移除也还是有效,除非物理删除,且物理恢复后继续生效。就像是一旦打开了使用.gitignore的开关,就只要物理存在就有效,不用实际添加进staging area 和 repository,只要存在于working direcotry就行
- git commit --amend --no-edit #追加到上一个commit,且不修改信息
- git commit -am "your messgae here!" #二段式变为一段式,但要求文件在repository有记录
- git clean -fxdn #强力物理删除被忽略的文件,-d删目录,-n预览,-f强力(cached文件不会被清除,因为没有被忽略)
- 有的时候git 的匹配机制会考虑ambiguous的问题,如果要让gitbash直接确定是location,用“--”,i.e., git log -- /folder/file
- 注意这里暂存区index是文件,主要由blob和路径等信息组成。下表中覆盖指的是不管进度直接覆盖,部分保存指的是不冲突情况下合并,保存是完全不改变不增加不减少;如果出现冲突,则会拒绝执行
checkout有部分保存,reset有保存
命令 暂存区 工作目录 风险等级 checkout <branch>
覆盖 部分保存 中等 reset --soft
✅保存 ✅保存 低 reset --mixed
覆盖 ✅保存 低 reset --hard
覆盖 覆盖 高 checkout --<file>(一般用于解决非文本冲突)
对应发起覆盖 覆盖对应 中等 - git reset一定要遵循什么模式出去,什么模式回来的原则,或者无脑选择最彻底的回退方式回来,i.e., --hard!