git常用命令集合
开头来点理论了解一下git的版本管理以及HEAD:
使用git的每次提交,Git都会自动把它们串成一条时间线,这条时间线就是一个分支。如果没有新建分支,那么只有一条时间线,即只有一个分支,在Git里,这个分支叫主分支,即master分支。有一个HEAD指针指向当前分支(只有一个分支的情况下会指向master,而master是指向最新提交)。每个版本都会有自己的版本信息,如特有的版本号、版本名等。。。。。理论巴拉巴拉的好烦,还是直接点好。
下载项目:git clone url
下拉内容:git pull 或者 git fetch ( git pull=git fetch+git merge )
暂存改变:git add . 或者 git add all
添加说明:git commit -m <说明>
撤销commit:git reset --soft HEAD^(HEAD^的意思是上一个版本,也可以写成HEAD~1;想撤回2次commit,使用HEAD~2)
提交内容:git push
移除远程分支:git push origin --delete <name>
移除本地分支:git branch -d <name>
添加仓库:git remote add origin <地址> 或者 git remote set-url --add origin <地址>
查看分支:git branch -a
创建分支:git branch <name>
修改分支名称:git branch -m <oldName> <newName>
新建并切换分支: git checkout -b <name> (先检出具体的分支,再新建,新建出分支的内容为该分支的内容)
切换分支:git checkout <name>
本地分支推送到远程:git push -u origin <name>
合并分支:git merge <name>
查看文件状态:git status (查看文件,文件夹在工作区,暂存区的状态)
获取完整commit id:git rev-parseHEAD
获取short commit id:git rev-parse --short HEAD
git打tag记录版本号
列出已有tag:git tag
新建tag:git tag <name>
查看tag详细信息:git show <name>
给指定的某个commit号加tag:git tag -a <name> <short commit id> -m <说明>
将tag同步到远程服务器:git push origin <name>
本地删除某个tag:git tag -d <name>
远程服务删除tag:git push origin :refs/tags/<name>
修改仓库地址
查看仓库地址:git remote -v
删除仓库地址:git remote rm origin
重新关联仓库地址:git remote add origin "新的仓库地址"
统计代码量
某时间段内的代码量:git log --since=2022-04-01 --until=2022-05-17 --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }'
总代码量:git log --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }'
个人的代码量:git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --since='2022-04-01' --until='2022-05-31' --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END{ printf "增加的行数:%s 删除的行数:%s 总行数: %s\n",add,subs,loc }' -; done
场景一:再多人开发的时候,有时代码的提交,合并时出现错误 ,想回退?
方法1:git reset(作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本)
1. 先使用命令“git log”查看版本号(tip:按Q退出)
2.“git reset --hard 目标版本号” 命令将版本回退到目标版本号
3. 再用“git log”查看版本信息,此时本地的HEAD已经指向之前的版本
4. 使用“git push -f”提交更改(tip:此时如果用“git push”会报错,因为我们本地库HEAD指向的版本比远程库的要旧)
方法2:git revert( 作用通过反做创建一个新的版本,这个版本的内容与我们要回退到的目标版本一样,但是HEAD指针是指向这个新生成的版本,而不是目标版本)
1.使用“git revert -n 返做版本号”(tip:这里可能会出现冲突,那么需要手动修改冲突的文件。而且要git add 文件名)
2.使用“git commit -m 版本名”提交
3.可以用“git log”查看本地的版本信息,可以看见多生成了一个新的版本
4.使用git push推到远程仓库
以上参考来自:https://blog.csdn.net/yxlshk/article/details/79944535 里面的步骤更加详细
场景二: 一个项目传到多个远程仓库。。。。
假设已经存在了一个名称为origin地址 。
方法1:push一次全部更新
1.使用 “git remote set-url --add origin <地址>” 添加新地址,可以通过 “git remote -v“ 查看是否添加成功。
2.接着 ”git push“ ,完工so easy~
方法2:一个一个push
1.使用 "git remote add neworigin <地址>" ,同上查看。
2.直接”git push“ 默认推推送的是origin, so再来一次 ”git push neworigin“。
场景三: 项目分支开发完了,合并到主分支上
假设:主分支名称为 A,子分支为 B
1.”git checkout A“ 将分支切换到主分支上。
2.”git merge B“, ok 好像很简单的样子,这会如果遇到冲突了耐着性子fix吧。