git常用命令操作

项目中我们经常用到git命令来进行项目管理,下面整理一些git的常用命令,基本上我都是自己试一个写一个,有很少部分没去试,有没写到的或错的后续会继续更新修改。

常用命令

  1. 初始化git仓库,会生成一个git文件,用来记录你的git操作
git init
  1. 克隆远程库,将远程库克隆到本地
git clone git地址
  1. 关联远程库
git remote add origin "仓库地址";
  1. git查看远程仓库地址命令
git remote -v
  1. 上传到暂存区,
// 上传某个文件
git add  文件名
// 上传所有文件
git add . / git add *(常用的,一般通过配合(.gitignore)文件忽略部分不必上传的依赖文件
//查看暂存区文件
git ls-files  

git add 撤销
//撤销git add 某个文件
git reset HEAD 文件名
git reset HEAD(撤回所有git add文件)
  1. 提交到本地库(目前还没提交到远程,为待上传状态)
git commit -m '提交说明'

commit 撤销
//1 把最后的commit切回已经git add状态
git reset --soft HEAD"^"
//2 把最后的commit切回还没git add状态,保留修改
git reset HEAD^
add + commit:git commit -am '提交说明' 
  1. 提交到远程库
//首次可以-u与当前远程库进行关联,后面提交可以简写
git push -u  origin 分支名
//例如
git push -u  origin master(主分支)
后面可以
git push origin 分支名 或者直接 git push
  1. 修改上一次提交说明文字
git commit --amend -m 'new Name'
git push
  1. 拉取远程最新更改
git pull
  1. 撤销文件修改,取消所有文件修改
//撤销部分文件
git checkout --  文件名
//撤销全部文件
git checkout -- .
  1. 重命名文件和删除文件(已被git管理的文件才可以哦)
重命名:
git mv 原文件名1  文件名2
例如:
git mv index.html index1.html //把index.html修改为index1.html
删除:
rm 文件名  //不要误删哦,删了可以git reset HEAD

分支管理 branch

查看所有分支:git branch -a
查看当前分支:git branch
查看本地分支对接远程库:git branch -v /  git branch -vv
创建分支:git branch 分支名
切换分支:git checkout 分支名 或者git switch 分支名
创建+切换分支:git checkout -b 分支名 或者 git switch -c 分支名
删除分支:git branch -d 分支名 做此操作前必须先切到其他分支,不可在当前分支做删除操作
删除远程分支:git push origin '空格':分支名  ===  git push origin -d 分支名
删除操作 例如: git push origin '' :test
修改分支名name1->name2:git branch -m 原名 修改名
提交本地分支到远程(当远程没有当前本地分支时可以使用):git push --set-upstream origin 分支名 //该命令会在远程新增一个和本地同名分支,并同步本地文件
拉取远程分支并在本地创建相同分支名 : git checkout -b 分支名 origin/分支名
<注意:当新建远程分支后,须在本地先git pull一下,检出远程新增分支,然后使用上述命令拉取新建远程分支到本地,最好取相同分支名>

状态及日志查看 log & status

查看当前版本库状态: git status
日志查看 git log 查看完按q键退出(quit嘛)
1. 直接在log命令之后,加 -n参数,n表示你要输出的数量: git log - 2 
2. 简化git log的默认的输出,仅输出commit hash 前7个字符串和提交说明: git log --oneline
3. 在git log 的基础上输出文件增删改的统计数据: git log --stat
4. 控制输出每个commit具体修改的内容,输出的形式以diff的形式给出: git log -p || git show(默认HEAD)
5. 这个命令用来输出汇总信息,以作者进行分类: git shortlog
git shortlog -s:用来统计每个作者的提交数量。
git shortlog -n:用来对统计的量进行倒序排列。
6. 加--author用来过滤commit,限定输出给定的用户:git log --author="作者名"
7. 限定指定日期范围的log: git log --after(或者before) '11-30-2020'
8. 控制是否显示merge的commit: git log --merges || git log --no-merges
9. git log输出时,显示对应commit所属的branch和tag信息:  git log --decorate --oneline
10. 历史提交并列显示:git log --pretty=oneline
11. 查看git详细操作日志 git reflog 
12. 可以看到分支合并图更详细:git log --graph
13. 可以看到分支合并图更简洁:git log --graph --pretty=oneline --abbrev-commit
14. 查看远端分支:git log origin/master(分支名)

复制转移提交:cherry-pick

阮一峰 cherry-pick详细教程

一、基本用法
git cherry-pick命令的作用,就是将指定的提交(commit)应用于其他分支。
git cherry-pick <commitHash> || master
假如你需要在dev分支做了bug修改, 代码改完了也commit了 ,
然后发现写错分支了,我****,你想把master上的代码移到dev上,
这时你就可以使用cherry-pick来进行操作,在dev分支执行git cherry-pick  master (hash也可以),
这时master的提交代码就过来了。(master已提交不会被清掉哦)
Cherry pick 支持一次转移多个提交:git cherry-pick hash1 hash2
Cherry pick 转移一系列的连续提交:git cherry-pick hash1^..hash5
例如:
git cherry-pick f5674^..0a7a7
假如不带这个^,则f5674不会被转过去,注意要按提交顺写,前些早提交,后写后提交。
其他配置项及代码冲突请移步到阮一峰大佬那去看,更详细。

变基:rebase

定义:rebase(变基)改变当前分支的基础分支版本(父版本)

注意:变基会改变提交历史,建议使用这个方法时 ,只在本地操作,不要推送到远程,并且不要在master分支执行。
和cherry-pick区别:由A转到B:
cherry-pick:在B中操作
rebase:在A中操作

在A分支中
执行git rebase B,会将B中的修改提交拉取到A中,并保留一个提交信息,
提交视图一条直线,更加清晰,不会像merge那样提交视图错乱,但是会缺失提交信息。不熟的话需慎用!!!搞项目还是merge稳妥点
解决冲突:修改文件(vi 文件名)-》git add .-> git rebase continue(可能执行多次)
忽略冲突:(放弃所在分支修改,使用其他分支):git rebase --skip(可能执行多次)
取消rebase:git rebase --abort

可以参考这篇文章的讲解:GIT变基

合并 merge

merge:合并分支
合并某分支到当前分支:git merge 某分支名 注意:(在当前分支做合并其他操作)
把b合并到a, 在a分支:git merge b 
不会丢失合并信息:git merge --no--ff
git merge --no-ff -m "merge with no-ff" 分支名

版本回退 reset

commit之后如果没有提交远程可以回退当前版本
git reset --hard HEAD 
2次回退:git reset --hard HEAD^^
50次回退:git reset --hard HEAD~50
回退到指定版本:git reset --hard commit_id

临时保存工作现场 stash

使用场景:当你在A分支开发时,发现B分支有一个bug需要紧急处理,你此时还没开发完毕,不想提交代码,你也不能切换到B分支,因为修改没有提交,这时就可以用git stash save "保存说明",先把修改存到缓存中,然后就可以切到B分支做处理。做完后回到A分支,继续你的开发git stash list 查看保存列表,然后git stash pop(默认取出第一条,并从列表中删除这条缓存),或者 git stash pop stash@{n},n为数字。或者git stash apply stash(默认取出第一条,不从列表中删除这条缓存,最好回来了就删除吧。省的以后开发影响)

stash:保存现场(临时保存)
1:建议:在功能未开发完成时,不要commit
2:规定:修改文件,在没有commit之前,不可切换分支(两个分支在同一时刻,是可以切换的)
如果还没有将某一个功能开发完毕;需要切换分支去修改bug,可以git stash;
保存现场:git stash
查看现场:git stash list
恢复现场:git stahs pop(将原来保存历史删除,用于还原内容)
恢复最近一次的现场:git stash apply(不删除保存历史,用于还原内容)
恢复最近一次的现场:git stash apply stash@{num}(num=1,2,3,4)
手工删除:git stash drop stash@{2}//删除最近第二次
清空stash:git stash clear

标签: tag

命令git tag 标签名 用于新建一个标签,默认为HEAD,也可以指定一个commit id;
可以指定标签信息;命令git tag -a 标签名 -m "线上版本..." {创建新对象}
可以查看所有标签:命令git tag
删除标签:git tag -d v1.0
删除远程标签:git push origin '空格':refs/tags/v1.0
查询标签:git tag -l v1.0
查询标签:git tag -l 'v*'(模糊查询)
推送标签到远程:git push origin v1.0
推送全部本地标签到远程:git push origin --tags

查看修改、版本差异: diff

比较本地库和工作区差异:git diff
比较a,b分支差异:git diff a b:|| git diff -u a b
比较两个版本差异:git diff commit_id1 commit_id2
比较本地库和暂存区差异:git diff --cached commitID
比较最新本地库和暂存区差异:git diff --cached HEAD
查看两个版本文件的修改:git diff commit_id1 commit_id2 文件名
例如:
git diff commit_id1 commit_id2 /pages/detail/index.html

多人管理

多人管理;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
要查看远程库的信息,用git remote:
查看远程库信息,使用git remote -v;
本地新建的分支如果不推送到远程,对其他人就是不可见的;

本地--》远程
第一次提交:git push -u origin/master
建立本地分支和远程分支的关联,使用git push --set-upstream  origin 分支名
把当前分支指向新远程分支bug2: git push origin HEAD:bug2

远程--》本地
在本地创建和远程分支对应的分支,
使用git checkout -b 分支名 origin 分支名,本地和远程分支的名称最好一致;
git checkout -b dev origin dev
git checkout --track origin dev
查看无效分支:git remote prune origin --dry-run
删除无效分支:git remote prune origin
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
显示远程分支:git remote show origin
显示远程分支:git remote show

追责命令:git blame index.html
查看index.html的所有提交commitiD 和每行作者
常用分支名:
生产分支:master
开发分支:develop
测试分支:test
bug分支:bugFix

差不多了,工作中能用到也就那几个,如果有问题呢,可以评论留言,我来修改。其实vsode不用命令就可以直接操作了,推荐两个好用的vscode插件,GitHistory和GitLens,都不错,推荐使用
后续有啥好用的没写到,也可以下方提示一下,也要学习嘛,别掖着哈~ 谢啦~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,640评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,254评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,011评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,755评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,774评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,610评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,352评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,257评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,717评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,894评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,021评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,735评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,354评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,936评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,054评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,224评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,974评论 2 355

推荐阅读更多精彩内容