配置
- 显示当前的Git配置
- git config --list
- 编辑Git配置文件
- git config -e
- 设置用户名和邮箱
- git config --global user.name "Rolle"
- git config --global user.email "i@liangyouze.com"
- 初始化仓库(在对应目录下)
- git init
代码提交
- 添加指定文件到暂存区
- git add file1 file2 file3
- 添加指定目录到暂存区,包括子目录
- git add dir
- 添加当前目录的所有文件到暂存区
- git add .
- 删除工作区文件,并且将这次删除放入暂存区
- git rm file1 ...
- 停止追踪指定文件,但该文件会保留在工作区
- git rm --cached file
- 重置提交备注信息
- git commit --amend
- git commit --amend -m "New commit message"
- 对比两个分支的不同,并导出到 diff.txt 文件中(覆盖 原来 diff.txt 文件内容)
- git diff branchA > diff.txt
- 对比两个分支的不同,并导出到 diff.txt 文件中(追加到 diff.txt 文件内容)
- git diff branchA >> diff.txt
分支
- 前仓库中存在的所有分支列表
- git branch
- 查看远程分支
- git branch -r
- 列出所有本地分支和远程分支
- git branch -a
- 创建分支
- git branch branchName
- 新建一个分支,并切换到该分支
- git checkout -b branch
- 切换分支
- git checkout branchName
- 删除本地分支
- git branch -d branchName
- 删除远程分支
- git push origin --delete xxxx
- 将分支dev与当前分支进行合并
- git merge origin/dev
- 新建一个分支,指向指定commit
- git branch branchName commit
- 合并dev分支到master
- git merge dev
- 选择一个commit,合并进当前分支
- git cherry-pick commit
- 从git的某次提交(commit)拉取分支
- git checkout commitId -b branchname
- 删除本地标签
- git tag -d tagName
- 删除远程标签
- git push origin -d tag-name
撤销
- 撤销一个合并
- git reset --hard HEAD
- 恢复暂存区的指定文件到工作区
- git checkout file
- 重置暂存区与工作区,与上一次commit保持一致
- git reset --hard
- 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
- git reset --hard 1094a
- 撤销工作区的修改(一键还原,可以恢复误删除的,前提是还没提到暂存区)
- git chekout -- fileName
比较
- 比较两个版本差异
- git diff master..test
- 当前工作目录和上次提交与本地索引之间的差异
- git diff
- 当前分支与其他分支的不同
- git diff test
- 查看工作区和版本库里面最新版本的区别:
- git diff HEAD -- current.txt
存储
- 存储当前状态
- git stash 'work'
- 恢复(恢复的同时把stash内容也删了)
- git stash pop
- 恢复指定的stash
- 先 git stash list
- git stash apply stash@{0}
- 创建一个标签
- git tag v1.0
- 给之前的commit打上一个标签
- git tag v1.0 f534324
- 查看tag
- git tag
- 查看标签信息
- git show v1.0
- 删除标签
- git tag -d v1.0
- 推送到远程标签
- git push origin v1.0
查看信息
- 显示有变更的文件
- git status
- 显示当前分支的版本历史
- git log
- git log --oneline
- 显示commit历史,以及每次commit发生变更的文件
- git log --stat
- 查看分支合并图
- git log --graph
- 显示所有提交过的用户,按提交次数排序
- git shortlog -sn
- 显示指定文件是什么人在什么时间修改过
- git blame file
- 显示今天你写了多少行代码
- git diff --shortstat "@{0 day ago}"
- 显示某次提交的元数据和内容变化
- git show commit
- 将本地分支推动到远程分支
- git push origin feature-branch:feature-branch //推送本地的feature-branch(冒号前面的)分支到远程origin的feature-branch(冒号后面的)分支(没有会自动创建)
- 把远程分支拉到本地
- git fetch origin dev(dev为远程仓库的分支名)
- 查看提交线
- git log --graph --pretty=oneline --abbrev-commit
- 统计个人代码量
- git log --author="youze" --pretty=tformat: --numstat | awk '{ add = $1; subs = $2; loc = $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %sn", add, subs, loc }' -
- 查看排名前5的贡献者
- git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5
奇淫技巧
- git fetch --all && git reset --hard origin/master
- git fetch --all && git reset --hard origin/master
- 展示本地仓库中任意两个 commit 之间的文件变动:
- git diff <commit-id> <commit-id>
- 输出暂存区和本地最近的版本 (commit) 的 different (不同)
- git diff --cached
- 输出工作区、暂存区 和本地最近的版本 (commit) 的 different (不同)。
- git diff HEAD
- 快速切换到上一个分支
- git checkout -
- 删除已经合并到 master 的分支
- git branch --merged master | grep -v '^*| master' | xargs -n 1 git branch -d
- 关联远程仓库(都行)
- git branch -u origin/mybranch
- git push origin/mybranch -u
- 重命名本地分支
- git branch -m <new-branch-name>
- 放弃所有修改:
- git checkout .
- 以新增一个 commit 的方式还原某一个 commit 的修改
- git revert <commit-id>
- 删除所有的stash
- git stash clear
- 配置多个remote(方便从不同的分支上拉取)
- git remote add originname1 https://origin1.com/project.git
- git remote add originname2 https://origin2.com/project.git
- 拉取远程fork到本地 git pull originname2 master(远程分支)
- 统计某人代码提交量
- git log --author="xxxxxxxxxxxxx" --pretty=tformat: --numstat | awk '{ add = $1; subs = $2; loc = $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %sn", add, subs, loc }' -
- 统计所有人代码提交量
- git log --format='%aN' | sort -u | while read name; do echo -en "$namet"; git log --author="$name" --pretty=tformat: --numstat | grep "(.html|.java|.xml|.properties|.css|.js|.txt)$" | awk '{ add = $1; subs = $2; loc = $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %sn", add, subs, loc }' -; done
- 统计某时间范围内的代码提交量
- git log --author=mengfanxiao --since=2019-01-01 --until=2021-02-01 --format='%aN' | sort -u | while read name; do echo -en "$namet"; git log --author="$name" --pretty=tformat: --numstat | grep "(.html|.java|.xml|.properties)$" | awk '{ add = $1; subs = $2; loc = $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %sn", add, subs, loc }' -; done
- 查看git提交前5名
- git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5
17 清楚已删除的远端分支
- git fetch -p
- 删除所有已合并的分支(除了 master|dev 分支) (还没尝试)
- git branch --merged | egrep -v "(^*|master|dev)"
- 删除所有已合并的本地分支(除了 master|dev 分支) (还没尝试)
- git branch --merged | egrep -v "(^*|master|dev)" | xargs git branch -d
提交规范
先来看看公式:
| <type>(<scope>): <subject> |
| --- |
- feat:新功能(feature)
- fix:修补bug
- docs:文档(documentation)
- style: 格式(不影响代码运行的变动)
- refactor:重构(即不是新增功能,也不是修改bug的代码变动)
- test:增加测试
- chore:构建过程或辅助工具的变动
scope
- 用于说明
commit
影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。
subject
是 commit
目的的简短描述,不超过50个字符。
fork的项目如何同步仓库源的最新更新
代码语言:text复制//查看项目远程仓库配置,如果没有源的地址则新增
git remote -v
//添加源项目地址
git remote add tata(随便一个名称) url(源项目名称)
//确认是否添加成功
git remote -v
//获取源项目的更新
git fetch tata
//查看所有分支
git branch
//合并tata/master分支的变化到本地master分支
git merge tata/master
//这里仅将fork源仓库更新到本地仓库,如果要更新远程fork仓库,必须向远程push一次
git push origin master
多次提交合并
参考
廖雪峰
Git的奇技淫巧
Git 常用指令 & 技巧
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!