Git
基本操作
别名配置
参考:配置别名
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.last 'log -1'
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
查看配置文件
cat ~/.gitconfig
查看帮助
git help
暂存区
变动暂存
git stash
## 若需要添加提示<message>
git stash push -m "<message>"
查看暂存区
git stash list
从暂存取出变动,默认从栈顶取出(栈:先入后出)
git stash pop
## 若明确需要取出某个变动<stash id>
git stash pop <stash id>
提交历史变直线
git rebase
代码回退
假设当前有以下提交,需要将third commit(<commit_id>:12582ab)丢弃
* 12582ab - third commit (2 minutes ago) <sun8min>
* 8936067 - second commit (4 minutes ago) <sun8min>
* 2d47fc8 - init (5 minutes ago) <sun8min>
使用reset, 需要注意,commit id 为需要回退到的点
git reset --hard 8936067
## 若文件改动需要保留
git reset 8936067
使用revert,需要注意,commit id 为要丢弃的点
git revert 12582ab
变动历史(后悔药)
git reflog
使用reflog查看变动历史,根据commit id可以回退
移除被git追踪的文件
移除已经被git追踪的文件 file_xx,需要git rm --cache -f file_xx
,并在.gitignore文件添加忽略文件 file_xx,
如果文件在本地不需要保留,去掉--cache
强制提交
git push -f
其他
git仓库忽略文件
添加.gitignore文件,文件内容例:
### mac OS ###
*.DS_Store
### IntelliJ IDEA ###
**/.idea
**/*.iml
# generated site file
_site
**/:表示忽略所有路径下
调整github上面语言显示
添加.gitattributes文件,文件内容例:
## 忽略overlay目录文件,调整语言占比
sun8min-sso/overlays/* linguist-vendored=true
常见疑问
reset 与 revert 的区别
reset 之后,即使 push -f
强制提交,如果别人在 reset 之前有过下载,拉取了要丢弃的 commit,
之后推送远程仓库时会重新提交上去。
revert 是一个新的提交,让提交后的代码达到 reset 的效果。并且在远程仓库上还能看到提交历史。
所以如果是个人仓库,用reset,多人仓库,保险起见用revert。
移除被git追踪的文件后还能看到该文件吗
移除之后,当前commit不会看到,如果之前有提交过,在提交的commit还是能看到(即使后来移除git追踪的情况)。 以下操作可移除文件,但是注意!!如果有远程仓库,并且提交过,别人可能看到过,如果是密码类文件,最好更改密码。
假设要移除的文件名是file_xx,用git lg file_xx
查看文件的第一次提交commit,并用reset --hard
重置代码到file_xx文件第一次提交前的地方,之后移除被git追踪的文件,如果有远程仓库,
再使用push -f
强制提交。