Git命令手册
Git 流程图
-
Workspace:工作区
-
Index / Stage:暂存区
-
Repository:本地仓库
-
Remote:远程仓库
Git 常用命令汇总
1、完成git项目的关联提交
git init
git remote add origin http://mtgitlab.hnzycfc.com/perpetual/yxd-promo-regist.git
git add .
git commit -m "Init Commit"
git push -u origin master
2、写在前面(最常用)
# 查看工作区和暂存区的状态
git status
# 根据对应的远程分支检出本地分支
git checkout branchName
# 基于某个远程分支新建本地分支并切换到当前分支
git checkout -b 本地分支名 origin/远程分支名 # 记得先获取一下远程分支的更新(git pull)
# 将工作区的文件提交到暂存区(所有)
git add .
# 提交到本地分支
git commit -m "本次提交说明"
# 暂存提交合并
git commit -am '本次提交说明'
# 拉取远程分支的代码
git pull
# 拉取指定远程分支的代码
git pull origin branchName
# 将本地分支推送到远程
git push
# 将本地分支推送到指定的远程分支
git push origin branchName
# 推送到远程分支,并设置本地分支跟踪的远程分支
git push -u origin branchName
Git 配置
# 配置全局用户
git config --global user.name "用户名"
git config --global user.email "git账号"
# 查看git全局配置
cat ~/.gitconfig
# 配置全局git别名
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"
# 查看git远程分支地址
git remote -v
Git初始化
Git 命令详解
clone
# git clone <版本库的网址>
git clone http://github.com/jquery/jquery.git
# git clone <版本库的网址> <本地目录名>
git clone http://github.com/jquery/jquery.git jq
add
# 添加指定文件到暂存区
git add [file1] [file2]
# 添加指定目录到暂存区,包括子目录
git add [dir]
# 添加pages目录及其子目录下所有*.ts文件
git add pages/*.ts
# 添加当前目录下的所有文件到暂存区
git add .
# 删除工作区/暂存区的文件
git rm [file1] [file2]
# 停止追踪指定文件,但该文件会保留在工作区
git rm --cached [file]
status
commit
git commit --no-verify
pull & push
git pull -p
// 推送到远程分支,并设置本地分支跟踪的远程分支
git push --set-upstream origin branchName
# 简写
git push -u origin branchName
branch
// 查看
git branch // 查看本地分支
git branch -r // 查看远程分支
git branch -a // 查看所有分支
git branch -vv // 查看本地分支及追踪的分支
// 删除
git branch -d branchName // 删除本地分支
git push origin --delete branchName // 删除远程分支
diff
个人觉得 git diff 不怎么好用,现在的图形界面化工具都很成熟,推荐2个我平常经常用的git分支图形化工具(图一:Git Graph、图二:gitlab分支图)
remote
tag
# 列出所有标签
git tag
# 默认在 HEAD 上创建一个标签
git tag v1.0.0
# 指定一个 commit id 创建一个标签
git tag v1.0.0 78aa36c7
# 创建带有说明的标签,用 -a 指定标签名,-m 指定说明文字
git tag -a v1.0.0 -m "version 1.0.0 released"
# 查看单个标签具体信息
git show <tagname>
# 推送指定的本地标签
git push origin <tagname>
# 推送本地未推送的所有标签
$ git push origin --tags
# 删除本地标签
$ git tag -d v1.0.0
# 删除一个远程标签(先删除本地 tag ,然后再删除远程 tag)
$ git push origin :refs/tags/<tagname>
checkout
git checkout -b 本地分支名 origin/远程分支名 // 基于某个远程分支新建分支并切换到指定分支
Git钩子
Git 日志
git 中 D 向下翻一行 F 向下翻页 B 向上翻页 Q 退出
查看提交历史
git log
git log --all # 查看所有git提交记录
git log --oneline # 将日志记录一行一行的显示
git log --graph # git记录图形化显示
git log --oneline --graph # git短记录图形化显示
git log --reverse # 查看git提交记录(顺序反转)
git log --stat # 显示每次更新的文件修改统计信息,会列出具体文件列表
git log --abbrev-commit # 显示commit缩写(仅显示 SHA-1 的前几个字符)
git log -p # 显示每次提交所引入的差异(按 补丁 的格式输出)
日志过滤
常用
git log --no-merges # 过滤掉merge提交记录
git log --grep='关键字' # 过滤出日志记录中(commit提交时的注释)与关键字有关的记录
git log -10 # 显示最近10条提交记录
git log --author='鲍广伟' # 查找这个作者的提交记录
git log global.d.ts src/ #通过文件或者文件夹过滤提交记录
git shortlog -20 # 按作者分类,过滤出最近的20条短提交日志
by merge
by time
# --since(--after)
git log --since=2.weeks
git log --since='2 years ago'
git log --after=day/1 week/1 '2020-01-01' # 查找最近 一天、一周、或者2020-01-01后的提交记录
# --until(--before)
git log --until='2018-12-31 17:30:00'
git log --before=day/1 week/1 '2020-01-01' # 查找一天、一周、或者2020-01-01前的提交记录
format
git log --pretty=format:'' # ???
git log --format='%h - %an - %ar - %s' --no-merges
git log --oneline --no-merges --pretty=%an | sort | uniq -c | sort -r
git log --all --pretty=%ae | sort | uniq -c | sort -r
git 点线图
* 表示一个 commit
| 表示分支前进
/ 表示分叉
\ 表示合入
|/ 表示新分支
Git更改已提交commit信息
修改最近一次提交
# 单纯的更改commit信息
git commit --amend # insert进入编辑后,esc退出界面,:wq保存退出
# 提交后发现有的代码没暂存,想合并提交
git add .
git commit --amend # 进入 commit 编辑,但只需:wq
修改之前的提交
???
代码回滚
# 回退命令
# git reset --hard 版本号
git reset --hard HEAD^ 回退到上个版本
git reset --hard commit_id 回退到指定的提交版本
# 强推到远程
git push origin HEAD --force
常用Git代码统计命令
#参考贡献者统计
git log --pretty='%aN' | sort -u | wc -l
# 查看仓库提交者排名前 5
git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5
# 查看个人的增删行数
git log --author="username" --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" --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 }' -; done
# 查看某个工程的代码总行数
cd src/
find . "(" -name "*.js" -or -name "*.jsx" -or -name "*.ts" -or -name "*.tsx" -or -name "*.less" -or -name "*.html" ")" -print | xargs wc -l
常见小问题
1、git远程删除分支后,本地git branch -a 依然能看到,如何解决?
git branch -r // 查看远程分支
git remote show origin // 查看分支对应关系
git remote prune origin // 删除不存在分支
使用命令 git remote show origin,可以查看remote地址,远程分支,还有本地分支与之相对应关系等信息。
2、git 提交代码如何避开git钩子(pre-commit)检测?
git commit -m '提交信息' --no-verify
# 简写
git commit -m '提交信息' -n
3、git 如何放弃本地修改?
# 注意:暂存文件无效
git checkout . && git clean -df
# 暂存文件也可还原
git stash
3、如何让工作目录变干净?
# 保存当前未commit的代码
git stash
# 保存当前未commit的代码并添加备注
git stash save "备注的内容"
# 列出stash的所有记录
git stash list
# 删除stash的所有记录
git stash clear
# 应用最近一次的stash
git stash apply
# 应用最近一次的stash,随后删除该记录
git stash pop
# 删除最近的一次stash
git stash drop
参考链接
- git book git-scm.com/book/zh/v2
- 三年 Git 使用心得 & 常见问题整理 juejin.im/post/5ee649…
- git 使用之日志、数据恢复 ahuigo.github.io/b/git/git-l…
转载自:https://juejin.cn/post/7203563038300127293