我平时使用 Git 的时候,很多的 Git 命令我都不是很常用,工作中一般我们会配合一些可视化工具,或者编辑器自带的一些插件去维护 Git 仓库,但是我们也要记得一些常用 Git 命令来应变一些特殊的场景,下面是我收录整理的常用和不常用的一些 Git 命令,希望能帮助到大家更好的掌握 Git 的使用,如果文章和笔记能带您一丝帮助或者启发,请不要吝啬你的赞和收藏,你的肯定是我前进的最大动力。

新建

创建一个新的 git 版本库。这个版本库的配置、存储等信息会被保存到.git 文件夹中

# 初始化当前项目
$ git init# 新建一个目录,将其初始化为Git代码库
$ git init [project-name]# 在指定目录创建一个空的 Git 仓库。运行这个命令会创建一个名为 directory,只包含 .git 子目录的空目录。$ git init --bare <directory># 下载一个项目和它的整个代码历史
# 这个命令就是将一个版本库拷贝到另一个目录中,同时也将分支都拷贝到新的版本库中。这样就可以在新的版本库中提交到远程分支
$ git clone [url]

配置

更改设置。可以是版本库的设置,也可以是系统的或全局的

# 显示当前的Git配置
$ git config --list# 编辑Git配置文件
$ git config -e [--global]# 输出、设置基本的全局变量
$ git config --global user.email
$ git config --global user.name$ git config --global user.email "MyEmail@gmail.com"
$ git config --global user.name "My Name"# 定义当前用户所有提交使用的作者邮箱。
$ git config --global alias.<alias-name> <git-command># 为Git命令创建一个快捷方式(别名)。
$ git config --system core.editor <editor>

帮助

git 内置了对命令非常详细的解释,可以供我们快速查阅

# 查找可用命令
$ git help# 查找所有可用命令
$ git help -a# 在文档当中查找特定的命令
# git help <命令>
$ git help add
$ git help commit
$ git help init

状态

显示索引文件(也就是当前工作空间)和当前的头指针指向的提交的不同

# 显示分支,未跟踪文件,更改和其他不同
$ git status# 查看其他的git status的用法
$ git help status

信息

获取某些文件,某些分支,某次提交等 git 信息

# 显示commit历史,以及每次commit发生变更的文件
$ git log --stat# 搜索提交历史,根据关键词
$ git log -S [keyword]# 显示某个commit之后的所有变动,每个commit占据一行
$ git log [tag] HEAD --pretty=format:%s# 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件
$ git log [tag] HEAD --grep feature# 显示某个文件的版本历史,包括文件改名
$ git log --follow [file]
$ git whatchanged [file]# 显示指定文件相关的每一次diff
$ git log -p [file]# 显示过去5次提交
$ git log -5 --pretty --oneline# 显示所有提交过的用户,按提交次数排序
$ git shortlog -sn# 显示指定文件是什么人在什么时间修改过
$ git blame [file]# 显示暂存区和工作区的差异
$ git diff# 显示暂存区和上一个commit的差异
$ git diff --cached [file]# 显示工作区与当前分支最新commit之间的差异
$ git diff HEAD# 显示两次提交之间的差异
$ git diff [first-branch]...[second-branch]# 显示今天你写了多少行代码
$ git diff --shortstat "@{0 day ago}"# 比较暂存区和版本库差异
$ git diff --staged# 比较暂存区和版本库差异
$ git diff --cached# 仅仅比较统计信息
$ git diff --stat# 显示某次提交的元数据和内容变化
$ git show [commit]# 显示某次提交发生变化的文件
$ git show --name-only [commit]# 显示某次提交时,某个文件的内容
$ git show [commit]:[filename]# 显示当前分支的最近几次提交
$ git reflog# 查看远程分支
$ git br -r# 创建新的分支
$ git br <new_branch># 查看各个分支最后提交信息
$ git br -v# 查看已经被合并到当前分支的分支
$ git br --merged# 查看尚未被合并到当前分支的分支
$ git br --no-merged

添加

添加文件到当前工作空间中。如果你不使用 git add 将文件添加进去,那么这些文件也不会添加到之后的提交之中

# 添加一个文件
$ git add test.js# 添加一个子目录中的文件
$ git add /path/to/file/test.js# 支持正则表达式
$ git add ./*.js# 添加指定文件到暂存区
$ git add [file1] [file2] ...# 添加指定目录到暂存区,包括子目录
$ git add [dir]# 添加当前目录的所有文件到暂存区
$ git add .# 添加每个变化前,都会要求确认
# 对于同一个文件的多处变化,可以实现分次提交
$ git add -p

删除

rm 和上面的 add 命令相反,从工作空间中去掉某个文件

# 移除 HelloWorld.js
$ git rm HelloWorld.js# 移除子目录中的文件
$ git rm /pather/to/the/file/HelloWorld.js# 删除工作区文件,并且将这次删除放入暂存区
$ git rm [file1] [file2] ...# 停止追踪指定文件,但该文件会保留在工作区
$ git rm --cached [file]

分支

管理分支,可以通过下列命令对分支进行增删改查切换等

# 查看所有的分支和远程分支
$ git branch -a# 创建一个新的分支
$ git branch [branch-name]# 重命名分支
# git branch -m <旧名称> <新名称>
$ git branch -m [branch-name] [new-branch-name]# 编辑分支的介绍
$ git branch [branch-name] --edit-description# 列出所有本地分支
$ git branch# 列出所有远程分支
$ git branch -r# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]# 新建一个分支,并切换到该分支
$ git checkout -b [branch]# 新建一个分支,指向指定commit
$ git branch [branch] [commit]# 新建一个分支,与指定的远程分支建立追踪关系
$ git branch --track [branch] [remote-branch]# 切换到指定分支,并更新工作区
$ git checkout [branch-name]# 切换到上一个分支
$ git checkout -# 建立追踪关系,在现有分支与指定的远程分支之间
$ git branch --set-upstream [branch] [remote-branch]# 合并指定分支到当前分支
$ git merge [branch]# 选择一个commit,合并进当前分支
$ git cherry-pick [commit]# 删除分支
$ git branch -d [branch-name]# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]# 切换到某个分支
$ git co <branch># 创建新的分支,并且切换过去
$ git co -b <new_branch># 基于branch创建新的new_branch
$ git co -b <new_branch> <branch># 把某次历史提交记录checkout出来,但无分支信息,切换到其他分支会自动删除
$ git co $id# 把某次历史提交记录checkout出来,创建成一个分支
$ git co $id -b <new_branch># 删除某个分支
$ git br -d <branch># 强制删除某个分支 (未被合并的分支被删除的时候需要强制)
$ git br -D <branch>

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:721195303


检出

将当前工作空间更新到索引所标识的或者某一特定的工作空间

# 检出一个版本库,默认将更新到master分支
$ git checkout
# 检出到一个特定的分支
$ git checkout branchName
# 新建一个分支,并且切换过去,相当于"git branch <名字>; git checkout <名字>"
$ git checkout -b newBranch

远程同步

远程同步的远端分支

# 下载远程仓库的所有变动
$ git fetch [remote]# 显示所有远程仓库
$ git remote -v# 显示某个远程仓库的信息
$ git remote show [remote]# 增加一个新的远程仓库,并命名
$ git remote add [shortname] [url]# 查看远程服务器地址和仓库名称
$ git remote -v# 添加远程仓库地址
$ git remote add origin git@ github:xxx/xxx.git# 设置远程仓库地址(用于修改远程仓库地址)
$ git remote set-url origin git@ github.com:xxx/xxx.git# 删除远程仓库
$ git remote rm <repository># 上传本地指定分支到远程仓库
# 把本地的分支更新到远端origin的master分支上
# git push <远端> <分支>
# git push 相当于 git push origin master
$ git push [remote] [branch]# 强行推送当前分支到远程仓库,即使有冲突
$ git push [remote] --force# 推送所有分支到远程仓库
$ git push [remote] --all

撤销

# 恢复暂存区的指定文件到工作区
$ git checkout [file]# 恢复某个commit的指定文件到暂存区和工作区
$ git checkout [commit] [file]# 恢复暂存区的所有文件到工作区
$ git checkout .# 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
$ git reset [file]# 重置暂存区与工作区,与上一次commit保持一致
$ git reset --hard# 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
$ git reset [commit]# 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
$ git reset --hard [commit]# 重置当前HEAD为指定commit,但保持暂存区和工作区不变
$ git reset --keep [commit]# 新建一个commit,用来撤销指定commit
# 后者的所有变化都将被前者抵消,并且应用到当前分支
$ git revert [commit]# 恢复最后一次提交的状态
$ git revert HEAD# 暂时将未提交的变化移除,稍后再移入
$ git stash
$ git stash pop# 列所有stash
$ git stash list# 恢复暂存的内容
$ git stash apply# 删除暂存区
$ git stash drop

commit

将当前索引的更改保存为一个新的提交,这个提交包括用户做出的更改与信息

# 提交暂存区到仓库区附带提交信息
$ git commit -m [message]# 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]# 提交工作区自上次commit之后的变化,直接到仓库区
$ git commit -a# 提交时显示所有diff信息
$ git commit -v# 使用一次新的commit,替代上一次提交
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit --amend -m [message]# 重做上一次commit,并包括指定文件的新变化
$ git commit --amend [file1] [file2] ...

diff

显示当前工作空间和提交的不同

# 显示工作目录和索引的不同
$ git diff# 显示索引和最近一次提交的不同
$ git diff --cached# 显示工作目录和最近一次提交的不同
$ git diff HEAD

grep

可以在版本库中快速查找

可选配置:

# 感谢Travis Jeffery提供的以下用法:
# 在搜索结果中显示行号
$ git config --global grep.lineNumber true# 是搜索结果可读性更好
$ git config --global alias.g "grep --break --heading --line-number"
# 在所有的java中查找variableName
$ git grep 'variableName' -- '*.java'# 搜索包含 "arrayListName" 和, "add" 或 "remove" 的所有行
$ git grep -e 'arrayListName' --and \( -e add -e remove \)

log

显示这个版本库的所有提交

# 显示所有提交
$ git log# 显示某几条提交信息
$ git log -n 10# 仅显示合并提交
$ git log --merges# 查看该文件每次提交记录
$ git log <file># 查看每次详细修改内容的diff
$ git log -p <file># 查看最近两次详细修改内容的diff
$ git log -p -2#查看提交统计信息
$ git log --stat

merge

合并就是将外部的提交合并到自己的分支中

# 将其他分支合并到当前分支
$ git merge branchName# 在合并时创建一个新的合并后的提交
# 不要 Fast-Foward 合并,这样可以生成 merge 提交
$ git merge --no-ff branchName

mv

重命名或移动一个文件

# 重命名
$ git mv test.js test2.js# 移动
$ git mv test.js ./new/path/test.js# 改名文件,并且将这个改名放入暂存区
$ git mv [file-original] [file-renamed]# 强制重命名或移动
# 这个文件已经存在,将要覆盖掉
$ git mv -f myFile existingFile

tag

# 列出所有tag
$ git tag# 新建一个tag在当前commit
$ git tag [tag]# 新建一个tag在指定commit
$ git tag [tag] [commit]# 删除本地tag
$ git tag -d [tag]# 删除远程tag
$ git push origin :refs/tags/[tagName]# 查看tag信息
$ git show [tag]# 提交指定tag
$ git push [remote] [tag]# 提交所有tag
$ git push [remote] --tags# 新建一个分支,指向某个tag
$ git checkout -b [branch] [tag]

pull

从远端版本库合并到当前分支

# 从远端origin的master分支更新版本库
# git pull <远端> <分支>
$ git pull origin master# 抓取远程仓库所有分支更新并合并到本地,不要快进合并
$ git pull --no-ff

ci

$ git ci <file>
$ git ci .
# 将git add, git rm和git ci等操作都合并在一起做
$ git ci -a
$ git ci -am "some comments"
# 修改最后一次提交记录
$ git ci --amend

rebase (谨慎使用)

将一个分支上所有的提交历史都应用到另一个分支上不要在一个已经公开的远端分支上使用 rebase.

# 将experimentBranch应用到master上面
# git rebase <basebranch> <topicbranch>
$ git rebase master experimentBranch

reset (谨慎使用)

将当前的头指针复位到一个特定的状态。这样可以使你撤销 merge、pull、commits、add 等 这是个很强大的命令,但是在使用时一定要清楚其所产生的后果

# 使 staging 区域恢复到上次提交时的状态,不改变现在的工作目录
$ git reset# 使 staging 区域恢复到上次提交时的状态,覆盖现在的工作目录
$ git reset --hard# 将当前分支恢复到某次提交,不改变现在的工作目录
# 在工作目录中所有的改变仍然存在
$ git reset dha78as# 将当前分支恢复到某次提交,覆盖现在的工作目录
# 并且删除所有未提交的改变和指定提交之后的所有提交
$ git reset --hard dha78as

其他

# 生成一个可供发布的压缩包
$ git archive# 打补丁
$ git apply ../sync.patch# 测试补丁能否成功
$ git apply --check ../sync.patch# 查看Git的版本
$ git --version

在这里还是要推荐下我自己建的Python学习群:721195303,群里都是学Python的,如果你想学或者正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2020最新的Python进阶资料和零基础教学,欢迎进阶中和对Python感兴趣的小伙伴加入!

女朋友的生日可以忘记,这200条Git命令请务必记住相关推荐

  1. 启明云端分享| ESP32-S3支持自定义离线语音,可支持 200 条本地命令语句,无需外加 DSP 芯片

    提示:作为Espressif(乐鑫科技)大中华区合作伙伴及sigmastar(厦门星宸)VAD合作伙伴,我们不仅用心整理了你在开发过程中可能会遇到的问题以及快速上手的简明教程供开发小伙伴参考.同时也用 ...

  2. idea怎么直接拉去git_我用了一条Git命令,帮助同事免去了失业的风险

    开场白 人生就像一盒巧克力,你永远不知道下一颗是什么味道. 故事背景 同事昨天写了一天的代码,等到快要下班时候,要急着回家,然后拉了下代码,匆忙之中忘了提交本地代码,其中有一个类另外一个同事也做了修改 ...

  3. 一条 Git 命令减少了一般存储空间,我的服务器在偷着笑

    元旦不是搭建了一个<Java 程序员进阶之路>的网站嘛,其中用到了 Git 来作为云服务器和 GitHub 远程仓库之间的同步工具. 作为开发者,相信大家都知道 Git 的重要性.Git ...

  4. 女朋友过生日,男子买了一条项链,女友:值不了多少钱

    ​原题目:女朋友做生日,男子买来一条颈链,女朋友:值不上要多少钱"我女朋友做生日的情况下,我给她买来一条颈链,使用价值1800多元化,我认为这早已够非常好了,终究我们是平常人,而我的女朋友却 ...

  5. php批量生成200条8位兑换码

    应公司需求,需要一次性生成200条兑换码,这个算是固定公式了,所以在此记录一下,以后有需要的话,我自己也能直接拿来用. 一.兑换码生成的方式: /*** 生成随机的兑换码* */public stat ...

  6. 热烈庆祝女朋友的生日

    昨天是女朋友的生日,真是遗憾--不能够陪在她身边和她一起度过. 本来还计划晚上打电话给她的,但是和寝室的同事一起聊天,聊得比较晚都12点多了,所以为了不打搅她,就没有给她打电话.希望她没有在意. 五一 ...

  7. 华为设备历史200条命令查询方法

    有时配置误操作后又执行了很多新命令,需要复查或纠正时无法通过上下键直接翻到之前配置的命令,此时可以使用display history-command all-users 查询最近200条配置的命令,如 ...

  8. 批量上传图片_微信公众号关键词回复图片突破200条规则,怎么设置?

    本文将讲解如何通过,微星极光-无限关键词助手[专业版]实现以下功能: 关键词数量突破微信官方200条限制 批量设置关键词回复图片 关键词数据离线管理,并且可以在不同公众号之间进行同步 本文所提及的全部 ...

  9. java版的短信接口封装,免费送给你,自带200条短信

    闪速码可以免费试用200条的短信平台,可以用来发送短信验证码或者发送通知短信.平台不仅支持企业,还支持个人(我最看重这点了).签名审核非常宽松,没有备案或者暂未上线的产品也可以申请签名 今天用闪速码为 ...

最新文章

  1. 【Spring注解系列11】Spring后置处理器BeanPostProcessor用法与原理
  2. linux ps1 目录颜色,Linux下PS1终端下的颜色设置
  3. 四十四、Stata统计操作和绘图
  4. flashbackup闪回数据库
  5. linux批量文件编码转换,Linux系统批量转换文件编码脚本
  6. 关闭window 8.1 的skydrive
  7. AbleCloud与物联智慧战略合作,联合服务视频类智能硬件
  8. linux 扩lv文件系统,Linux LVM系列(五)lv xfs文件系统在线扩容
  9. 【自用】Android 切割Bitmap为多个小的Bitmap
  10. java 常用富文本编辑器_常用的六个富文本编辑器
  11. 卸载symantec endpoint protection
  12. 基于分布式光纤传感的高压电力线路异常监测探讨
  13. matlab怎么产生调频信号,MATLAB关于产生线性调频信号的问题
  14. PHPwamp开发环境搭建详解
  15. flask的一个小项目
  16. 关于电信路由猫、无线路由猫的设置
  17. 推荐几部和「隐秘的角落」同样好看的电视剧
  18. mysql select from user_select * from user 这条 SQL 语句,背后藏着哪些不可告人的秘密?...
  19. 设计模式学习笔记总结
  20. nbs***bsp;是牛客的bug吗

热门文章

  1. 基于java+springboot+mybatis+vue+mysql的校园台球厅人员与设备管理系统
  2. 高级程序员最爱逛的10大编程网站,你知道几个?
  3. CAD-VBA中对椭圆的定义
  4. mpg格式转换为mp4格式的方法
  5. Linux pytorch环境搭建
  6. C语言探索之旅 | 第二部分第六课:创建你自己的变量类型
  7. Csgo 控制台——代码
  8. 围攻、卡位、热抢,芯片热战堪比梅西助攻阿尔瓦雷斯
  9. 解决CAA百科全书中search无法加载的问题。
  10. 小学三年级计算机室使用计划,2020年小学计算机室工作计划范文