
Git常用命令总结
发布日期:2021-05-08 01:24:08
浏览次数:24
分类:精选文章
本文共 4855 字,大约阅读时间需要 16 分钟。
1. git log 查看日志
# 输出概要日志,这条命令等同于# git log --pretty=oneline --abbrev-commitgit log --oneline# 指定最近几个提交可以带上 - + 数字git log --oneline -5# 提供类似 GUI 工具的 log 展示git log --graph --date=relative --pretty=tformat:'%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%an %ad)%Creset'
2. git status 查看工作区的状态
# 等同 git status --long,查看当前工作区暂存区变动git status# 概要信息 (--short)git status -s# 查询工作区中是否有stash存在(暂存的东西),有则提醒该工作区有几个 stashgit status --show-stash
3. git checkout 切换分支,切换到对应记录中
# 分支切换git checkout dev # local branch# 切换远程分支git checkout origin/test # remote branch# 基于远程分支创建本地分支,并跟踪对应来自 'origin' 的远程分支git checkout --track origin/feature-test # new local branch wih remote branch# 基于本地分支开出新分支git checkout -b testbranch # new local branch with current branch# 彻底丢弃某个文件的改动git checkout -- file# 放弃本地所有改动git checkout .# 切换上一个分支git checkout -
4. git commit 提交文件
# 新修改的内容,添加到上次提交中,减少提交的日志# --no-edit:是跳过进入编辑器,直接提交# git commit --amend这条命令等同于# $ git reset --soft HEAD^# $ ... do something tree ...# $ git commit -c ORIG_HEADgit commit --amend --no-edit# 跳过校验直接提交,包括任何 githooksgit commit --no-verify -m "xxx"# 带提交概要信息git commit -m "xxx"# 指定目录格式提交# -t, --template= # 也可以从全局或者项目级别指定提交的模板文件# git config [--global] commit.template xxx# 现在一般都是 用社区的npm规范包,commitizen 和 commitlint 来规范提交git commit -t templateFile# 提交信息从文件读取,可以结合上面的一起用git commit -F
5. git reset 代码的版本回滚
# 硬性回滚,简单粗暴,直接抛弃回滚之后改动(log 还是有保留,内容不要而已)git reset --hard commit_sha1# 软性回滚, 跟 rebase 常规用法差不多的效果,可以把提交的东西丢回暂存区和工作区,# HEAD 的指向改变会对应的 commit,之后再考虑怎么 commitgit reset --soft commit_sha1# 软回滚一个版本,可以理解为撤销最近一次的 commitgit reset --soft HEAD~1# 清除暂存区但保留工作区变动。git reset --mixed commit_sha1# 保留工作区和暂存区之间的差异。git reset --merge commit_sha1# 保留工作区和HEAD之间的差异git reset --keep commit_sha1
6. git revert 用于master主分支的代码回滚,保留提交记录
# 回滚到某个 commitgit revert commit-sha1
7. git rebase 变基,让多个commit记录很干净
# 带 -i 可以进入交互模式,效果如下git rebase -i git-sha1|branch(HEAD)# 若是中间毫无冲突,变基则一步到位,否则需要逐步调整。git rebase --continue # 提交变更后继续变基下一步git rebase --skip # 引起冲突的commits会被丢弃,continue提示没有需要改动的也可以用这个跳过git rebase --abort # 若是变基改残废了,但是走到一半,可以彻底回滚变基之前的状态
8. git merge 合并分支
# --ff 是指fast-forward命令,当使用ff模式进行合并时,将不会创造一个新的commit节点。# --no-ff,保留合并分支的提交记录,一般主干用的比较多.# --ff-only 除非当前HEAD节点为最新节点或者能够用ff模式进行合并,否则拒绝合并并返回一个失败状态。# --squash 则类似 rebase squash,可以把合并多个 commit 变成一个git merge --no-ff branchName
9. git pull 拉取代码
# git pull --rebase(-r) 变基形式拉取合并代码,保持分支一条线
10. git push 推送代码到远程分支
# 这样会直接新建一个同名的远程分支git push origin localbranch # 删除远程分支(--delete)git push -d origin branchName# 推送所有标签git push --tags# 推送 commit 关联的 tagsgit push --follow-tags# 强制推送(--force)git push -f origin branchName # 一般合理的项目,主干都做了分支保护,不会允许强推行为# 有时候真的需要强推的时侯,但可不可以柔和一点呢?# 就是当前远程分支和你本地一致,没有别人提交的情况下可以强推# --force-with-lease: 若是远程有人提交,此次强推失败,反之成功git push --force-with-lease
11. git remote 关联仓库
# 常规关联本地 git init 到远程仓库的姿势git remote add origin url# 新增其他上游仓git remote add github url# 修改推送源git remote set-url origin(或者其他上游域) url
12. git branch 查看分支
# 分支删除,拷贝,重命名,参数若是大写就等同多了--force,强制执行# -c, --copy : 复制分支,# -C:等同于 --copy --force# -d, --delete: 删除分支# -m, --move:移动或者重命名分支git branch -d branchNamegit branch -M oldBranch newNameBranch# 手动指定它的当前分支的上游分支,两个写法一致的# 有关联一般也有取消关联,--unset-upstreamgit branch --set-upstream-to=origin/xxx git branch --set-upstream-to origin xxx
13. git stash 缓存工作区代码,修改紧急bug
# 缓存当前工作区的内容到stashName, save 这个现在不怎么推荐用,图方便也能用# -a|--all: 除了未跟踪的文件,其他变动的文件都会保存# -u|--include-untracked:包括没有添加到暂存区的文件git stash save stashNamegit stash -u save stashName# 现在基本推荐用 push,因为有 pop,语义上和维护上更清晰# 上面有的参数,它也有,还有-m 来备注这个 stash 的大概情况git stash push -m "更改了 xx" # 有保存那肯定也有取用的# pop: 取会删除对应的保存记录# apply: 取但保留记录# 0就是--index,这个东西哪里来的呢?git stash apply stash@{0}git stash pop stash@{0}# 查看stash 保存记录# eg: stash@{0}: On dev: 测试git stash list# 只想删除暂存记录怎么办:# clear : 清空所有 stash# drop: 清除指定的 stashgit stash clear # 慎用!git stash drop stash@{0}# 想看 stash 做了什么改动,类似简化版的git diffgit stash show stash@{0}
14. git reflog 记录所有的行为,版本回退
# 最近五次行为,不带-n 则默认所有git reflog -5
15. git cherry-pick 从多个分支中挑选合适的commit到合并一个地方
# 在当前分支挑其他分支的 commit,把那部分的变动那过来git cherry-pick commit-sha1# 支持一次性拿多个git cherry-pick master~4 master~2# 支持区间, 区间中间是 .. git cherry-pick startGitSha1..endGitSha1# --continue:继续 pick,一般有冲突解决后才需要这样# --skip:跳过这次进入队列下一次行为 # --abort : 完全放弃 pick,恢复 pick 之前的状态# --quit: 未冲突的自动变更,冲突的不要,退出这次 pick# 这几个状态跟变基差不多,解决冲突继续,跳过处理,放弃这次pick,不输出错误
16. git rm 重新索引.gitignore 的范围
# 删除某个文件的索引# --cache 不会删除硬盘中的文件,只是 git 索引(缓存)的关系!!!git rm --cache -- file# 递归清除全部所有索引(也可以理解为缓存吧),这个姿势适合重新让.gitignore 新范围生效git rm -r --cached . git add .git commit -m "xxx"
17. git rev-parse 快速获取部分git 仓库的信息
# 获取最新有效的commit# --short:显示七位的 sha1,不带就是全部# --verify: 校验是否有效commit# HEAD: 当前分支的head 指向git rev-parse --short HEAD --verify# 显示仓库的绝对路径git rev-parse --show-toplevel #eg: /Users/linqunhe/Code/aozhe/thinking-ui# 显示版本库.git 目录所在的位置git rev-parse --git-dir# 显示所有关联引用的 git sha1git rev-parse --all
18. git diff 比较差异
# git diff 比较版本之间的差异,代码的改动
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年03月28日 10时12分21秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
简单Makefile的编写
2019-03-05
使用BAT批处理 匹配查找指定文件夹,并在当文件夹下创建空文件
2019-03-05
wxpython的Hello,World代码探索
2019-03-05
【数字图像处理】OpenCV3 学习笔记
2019-03-05
【单片机开发】智能小车工程(经验总结)
2019-03-05
【单片机开发】基于stm32的掌上游戏机设计 (项目规划)
2019-03-05
KeepAlived介绍、配置示例、KeepAlived配置IPVS、调用脚本进行监控
2019-03-05
【Numpy学习】np.count_nonzero()用法解析
2019-03-05
Scala集合-数组、元组
2019-03-05
Flink Standalone集群安装和部署
2019-03-05
JAVA网络爬虫01-http client爬取网络内容
2019-03-05
04 程序流程控制
2019-03-05
java并发编程(1)
2019-03-05
C++&&STL
2019-03-05
双指针算法思想
2019-03-05
分组背包问题
2019-03-05
子集(LeetCode 78)
2019-03-05
旋转数组的最小值
2019-03-05
1004 Counting Leaves (30分)
2019-03-05