最佳实践

查看配置:
git config --list
修改配置:
git config --global user.name  xxxx
git config --global user.email xxxx@xxx.xxx
git命令缩写:
git config --global core.autocrlf false
git config --global core.eol lf
git config --global color.ui true
git config --global alias.sl "log --graph --decorate --pretty=oneline --abbrev-commit --all"
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset %C(bold blue)<%an>%Creset ---%C(yellow)%d%Creset %s %Cgreen(%cr)' --abbrev-commit"
git config --global alias.co checkout
git config --global alias.st status
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.df diff
git config --global credential.helper store
git config --global core.editor "vim"

git config --global https.proxy http://127.0.0.1:7890
git config --global https.proxy https://127.0.0.1:7890
git config --global --unset http.proxy
git config --global --unset https.proxy

添加和提交

git add [file]  添加文件
git add .       添加目录全部文件
git commit -m ""
git push

版本回退

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,
       用命令git checkout -- file
	   
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,
       第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作
	   
场景3:场景3:已经提交了不合适的修改到本地版本库时,想要撤销本次提交
	   git reset --soft HEAD^ 
	   git reset --hard HEAD^ 

分支管理

git checkout -b dev #创建分支
git add .
git commit -m "" 

git checkout master #切换为主分支
git checkout dev #切换到dev分支
git checkout master #切换为主分支

git merge dev  #在master上,合并dev分支的commit 

git branch -d dev   #在master上,删除分支

临时文件

git stash              暂存状态
git stash list       查看暂存列表
git stash clear   清空暂存列表
git stash drop stash@{0} 删除第一个暂存

git stash save "说明"    暂存未提交工作区
git stash pop                  恢复
git stash apply 
git stash apply         将缓存堆栈中的stash多次应用到工作目录中,但并不删除stash拷贝
git stash apply stash@{0}  指定使用哪一个stash

删除未合并的分支

T4分支已有改动,并且commit了
git branch -D T4

将分支推送到远程

git remote -v  #查看远程库信息
git checkout -b T5
git push origin T5 

查看远程分支和删除远程分支

#查看所有分支
git branch -a 
#查看远程分支
git branch -r 
#删除
git push origin -d ABC

拉取远程分支

git checkout -b dev origin/dev  #拉取远程分支
提交一些文件后
git checkout -b dev #创建分支
git add .
git commit -m "" 
然后
git push origin dev #推送到dev分支

git branch --set-upstream-to=origin/dev dev 将远程和本地分支建立联系

打标签

git checkout master ##切换到主分支

git tag v1.0 #打好v1.0标签

git tag # 查看所有标签

git log --oneline 

git tag v0.9 [f52c633]  # 忘记打标签,补打标签,f52c633为commit id 
git tag -d v0.9  #删除标签

git push origin v0.9 #推送标签到远程

git push origin :refs/tags/v0.9   #删除远程分支的tag
或者
git push origin --delete v0.9 #删除远程分支的tag

拉取并且合并

从远程master合并到feature分支,并且和本地的commit进行合并
git pull origin master --rebase

从远程仓库中拉取所有最新的更新,包括标签
git fetch --tags

使用 git checkout 命令切换到指定的标签
git checkout <tag_name>

如果你想要将标签赋值给本地分支
git branch <branch_name> <tag_name>

解决每次提示输入密码问题

git config --global credential.helper store

解决Windows和Linux环境换行符问题

warning: LF will be replaced by CRLF warning: LF will be replaced by CRLF in xxxxx The file will have its original line endings in your working directory.

git config --global core.autocrlf false

提交排行榜

git log --pretty='%aN' --since="2022-09-01" | sort | uniq -c | sort -k1 -n -r

代码统计

git log  --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat:  --since ==2022-09-01 --until=2022-09-30 --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done

参考