Git 常用命令总结,掌握这些,轻松驾驭版本管理

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/qianyu6200430/article/details/102385503

最近公司的代码管理工具要从SVN转到Git上,因此虽然之前用过Git,但是都是一些简单的推送提交,因此还是有必要进行一些系统的学习,这里做一下笔记,以备后询,且不定期更新。

关于SVN和Git的比较已经有很多文章说过了,就不再赘述,本文的重点是如何使用常用的Git命令进行操作,冷门的就不说了,且比较零散,系统的学习推介廖雪峰的Git教程。

声明

  1. 下面用户名都为 SHERlocked93,请自行修改成自己的用户名

1. 概览

  • 工作区 Workspace

  • 暂存区 Stage / Index

  • 本地仓库 Repository

  • 远程仓库 Remote

2. 修改

2.1 暂存修改

操作一览

操作 bash
创建stash git stash
查看 git stash list
应用 git stash apply stash@{ <num>}
删除 git stash drop stash@{ <num>}
还原上一个暂存并删除暂存(如无conflict) git stash pop

如果在工作的时候出现了临时需要解决的问题,而你又不希望提交,那么有个 stash功能

git stash

在暂存后工作区会回退到最近的一个commit的状态,以便开建新分支;比如我们修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;

当手头工作没有完成时,先把工作现场 git stash一下,然后去修复bug,修复后,再 git stash pop,回到工作现场。

2.2 撤销修改

还未提交到暂存区

当修改还没有被 add的时候,可以使用

git checkout -- filename.txt

来丢弃工作区某文件的修改,当然也可以把后面的文件改成 *来撤销所有文件的修改。这是用仓库的文件覆盖工作区的文件。

注意这里用的是 --,如果没有这个 --的话就变成切换分支了。

还未提交到仓库

如果你的修改已经被 add到了暂存区,但是还没有被 commit,那么可以使用

  1. git reset HEAD filename.txt

  2. git checkout -- filename.txt

首先用 reset来把修改撤回到工作区,再使用上面的 checkout命令撤回工作区的修改。这里的 reset相当于 add的反操作。

已经提交到仓库

则可以版本回退

git reset --hard 15zdx2s

这里的 --hard表示强制回退,丢弃本地的修改。这个回退比较野蛮,该版本号之后的提交都将不可见。

撤销之前某一个提交

git revert撤销一个提交的同时会创建一个新的提交,这是一个安全的方法,因为它不会重写提交历史。但实现上和reset是完全不同的。它撤销这个提交引入的更改,然后在最后加上一个撤销了更改的新提交,而不是从项目历史中移除这个提交。

git revert 46af7z6

相较于 reset , revert不会改变项目历史,对那些已经发布到共享仓库的提交来说这是一个安全的操作。其次 git revert 可以将提交历史中的任何一个提交撤销、而 reset会把历史上某个提交及之后所有的提交都移除掉,这太野蛮了。

相比 reset,它不会改变现在的提交历史。因此, revert 可以用在公共分支上, reset 应该用在私有分支上。

合并commit

如果已经 commit了怎么办,如果要撤回目前的 commit,可以把它合并到上一个 commit

git rebase -i HEAD~~

在出现的两个提交信息的 pick改为 fixup

3. 分支操作

3.1 创建/查看/合并分支

操作一览

操作 bash
查看分支 git branch
查看本地和远程分支 git branch -a
在target分支上创建分支,没有则从当前分支 git branch <branch-name> <target-branch>
创建并切换分支 git checkout -b <branch-name>
合并某分支到当前分支 git merge <branch-name>
删除分支,只能删参与了合并的 git branch -d <branch-name>
强行删除 git branch -D <branch-name>
删除远程分支 git push origin : <remote-branch-name>

创建分支

  1. # 创建新分支

  2. git branch bug-fix

  3. # 查看分支,-a查看本地和远程的分支,-r查看远程分支,-l或没有只查看本地

  4. git branch -a

  5. # 切换到刚刚创建的分支

  6. git checkout bug-fix

上面两个步骤可以合并为

  1. # 创建并切换到分支

  2. git checkout -b bug-fix

如果修改一下本地文件之后在这个分支继续培育一个版本之后,怎么去合并到主分支呢

  1. git add *

  2. git commit -m "some change"

  3. # 切换到主分支

  4. git checkout master

  5. # 合并分支

  6. git merge bug-fix

  7. # 删除分支 (可选)

  8. git branch -d bug-fix

如果master分支和新的分支都各自培育了版本,那么自动合并通常会失败,发生冲突 conflict,此时需要打开文件解决冲突之后 commit一个版本以完成合并

  1. git add *

  2. git commit -m "branch merge"

这里提一下, merge的时候有几个主要模式, --no-ff、 fast-forward,其中 fast-forward是默认的

  1. fast-forward:在master开始的新分支前进了几个版本之后如果需要merge回来,此时master并没有前进,那么这个模式就是把HEAD与master指针指向新分支上,完成合并。这种情况如果删除分支,则会丢失分支信息,因为在这个过程中并没有创建commit。

  2. --no-ff:关闭默认的 fast-forward模式,也就是在merge的时候生成一个新的commit,这样在分支历史上就可以看出分支信息。

3.2 远程仓库操作

操作一览

操作 bash
克隆 git clone <url>
添加远程仓库 git remote add <name> <url>
删除远程仓库 git remote rm <name>
拉取 git pull <remote-branch-name> <local-branch-name>
推送本地所有分支到远程 git push --all origin
推送到远程同名分支 git push origin <local-branch-name>
推送本地分支到远程master git push origin <local-branch-name>master
把当前本地分支推送并创建到远程 git push origin
检出远程分支 git checkout -b <new-local-branch-name> origin/ <remote-branch-name>

关于各个分支,哪些需要推送呢

  1. master分支是主分支,因此要时刻与远程同步;

  2. dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;

  3. bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;

  4. feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

直接 clone

在github上创建一个新的项目之后,比如叫 learn-git,那么可以直接 clone下来,注意创建的时候不要选择 Initializethisrepositorywitha README,我们要的是一个空的仓库

git clone https://github.com/SHERlocked93/learn-git.git

这样在本地就直接创建了一个空的文件夹 learn-git,当然里面有 .git文件夹。也可以使用SSH地址来clone,速度会快一些,也不用每次推送都输入口令,推介使用这种

git clone git@github.com:SHERlocked93/learn-git.git

添加一个文件 filename.txt之后

  1. git add filename.txt

  2. git commit -m "add filename.txt"

  3. git push -u origin master

这样就把本地新建的文件push到了远程仓库

本地与远程建立关联

如果已经有了本地工程文件夹,如何分享到github远程仓库呢,当然此时我们已经在github上创建了一个新的空白项目,还是叫 learn-git,在本地文件夹中

  1. git init

  2. # 关联远程库

  3. git remote add origin git@github.com:SHERlocked93/learn-git.git

  4. git push -u origin master

就可以了,如果你的远程仓库已经有了提交,那么在 push之前需要

  1. # 允许不想干库合并

  2. git pull origin master --allow-unrelated-histories

  3. git push -u origin master

先拉取远程分支,注意这里 --allow-unrelated-histories允许两个不想干的分支强行合并,再 push;这样在github的网站上还能看到commit记录。

也可以强硬一点直接强行推送

  1. # -f 强行推送

  2. git push -u origin master -f

这样本地仓库就直接把远程仓库覆盖了,且github上也看不到历史 commit了,如果不想被同事枪击的话,还是推介上一种做法。

同步远程仓库

那么已经clone的仓库如果希望同步原仓库新的提交怎么办

  1. # 从远程分支拉取代码到本地

  2. git pull upstream master

  3. # push到自己的库里

  4. git push origin master

3.3 多人协作

多人协作的工作模式通常是这样:

  1. 首先,可以试图用 git push origin<branch-name>推送自己的修改;

  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

  3. 如果合并有冲突,则解决冲突,并在本地提交;

  4. 没有冲突或者解决掉冲突后,再用 git push origin<branch-name>推送就能成功

从远程抓取分支,使用 git pull,如果有冲突,要先处理冲突, add->commit->push。如果 git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令 git branch--set-upstream-to<branch-name>origin/<branch-name>

4. 标签操作

操作一览

操作 bash
查看所有标签 git tag
新建标签 git tag <tagname>
新建并制定说明 git tag <tagname> -m <message> <bash>
查看标签说明 git show <tagname>
删除标签 git tag -d <tagname>
推送某个标签到远程 git push origin <tagname>
推送所有未推送到远程的本地标签 git push origin --tags
合并远程仓库的标签到本地 git pull origin --tags
删除远程标签 git push origin :refs/tags/ <tagname>

如果要删除远程分支,需要

  1. # 首先删除本地tag,假如tag是v0.9

  2. git tag -d v0.9

  3. # 再从远程删除

  4. git push origin :refs/tags/v0.9

5. 提交格式

type:

  • feat: 新特性,添加功能

  • fix: 修改bug

  • refactor: 代码重构

  • docs: 文档修改

  • style: 代码格式修改, 注意不是 css 修改

  • test: 测试用例修改

  • chore: 其他修改, 比如构建流程, 依赖管理.


网上的帖子大多深浅不一,甚至有些前后矛盾,在下的文章都是学习过程中的总结,如果发现错误,欢迎留言指出~

推介阅读:

  1. 廖雪峰 - Git教程

  2. github实现本地仓库与远程仓库同步

  3. 图解 Git 命令

  4. git基本操作,一篇文章就够了!

  5. 团队协作中的 Github flow 工作流程

  6. git 命令大全

附件

  1. Git常用命令速查表:

❤️ 看完三件事

如果你觉得这篇内容对你挺有启发,我想邀请你帮我三个小忙:

  1. 点个「在看」,让更多的人也能看到这篇内容(喜欢不点在看,都是耍流氓 -_-)

  2. 关注我的博客 https://github.com/SHERlocked93/blog,让我们成为长期关系

  3. 关注公众号「前端下午茶」,持续为你推送精选好文,也可以加我为好友,随时聊骚。

Git 常用命令总结,掌握这些,轻松驾驭版本管理相关推荐

  1. 几张图就能轻松掌握Git常用命令和原理

    Git介绍 本质上,Git是一套内容寻址(content-addressable)文件系统,而和我们直接接触的Git界面,只不过是封装在其之上的一个应用层.这个关系颇有点类似于计算机网络中应用层和下属 ...

  2. Git常用命令和Git团队使用规范指南

    1. 前言 在2005年的某一天,Linux之父Linus Torvalds 发布了他的又一个里程碑作品--Git.它的出现改变了软件开发流程,大大地提高了开发流畅度,直到现在仍十分流行,完全没有衰退 ...

  3. Git 常用命令详解(二)

    2019独角兽企业重金招聘Python工程师标准>>> Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如:linux kernel),管理私人的文档 ...

  4. Git——常用命令再学习

    目录 1. 全局配置授权信息 2. 仓库初始化 3. 版本回退 4. 工作区和暂存区 5. 远程仓库 6. 分支管理 7. 标签管理 8. 配置别名 小结 git常用命令 1. 全局配置授权信息 gi ...

  5. 【转载】Git 常用命令大全

    一. Git 常用命令速查 git branch 查看本地所有分支 git status 查看当前状态  git commit 提交  git branch -a 查看所有的分支 git branch ...

  6. Git 常用命令集锦

    文档已储存在 GitHub,这里不再更新校正,请原谅. 远程仓库相关命令 克隆远程仓库:git clone git://github.com/jquery/jquery.git 查看远程仓库:git ...

  7. 用好 Git 和 SVN,轻松驾驭版本管理

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者 | 凌承一 来源 | bubuko.com/infodeta ...

  8. gitee项目能用SVN拉取吗_用好 Git 和 SVN,轻松驾驭版本管理

    来源 | 凌承一链接 | bubuko.com/infodetail-2844306.html 本文从 Git 与 SVN 的对比入手,介绍如何通过 Git-SVN 开始使用 Git,并总结平时工作高 ...

  9. Git 常用命令速查表(图文+表格)

    一. Git 常用命令速查 git branch 查看本地所有分支 git status 查看当前状态  git commit 提交  git branch -a 查看所有的分支 git branch ...

最新文章

  1. 使用 Code Snippet 简化 Coding
  2. IIS 之 HTTP错误 404.17 - Not Found(请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。)...
  3. Linux中使用Linux的vim如何让代码高亮显示
  4. 只有失去了,才知道珍惜!!!
  5. Bitmap 索引 vs. B-tree 索引:如何选择以及何时使用?——4-5
  6. 控件包含代码块(即 % ... %),因此无法修改控件集合。
  7. iphone打字怎么换行_iPhone电池保养指南
  8. 企业实战_19_MyCat初始化ZK并配置Mycat支持ZK
  9. mysql saveorupdate_Mybatis SaveOrUpdate插件
  10. 《天天数学》连载44:二月十三日
  11. server xcode 云服务器_SRT推流测试及服务器搭建
  12. 哈弗h2s车内时间怎么调_你想拥抱的品质生活,就让哈弗H4乐享版帮你实现吧
  13. oracle rman是干嘛的,我对Oracle RMAN备份的理解
  14. AotucCrawler 快速爬取美女图片
  15. html-HR标签分割线
  16. 外贸公司邮箱大全,选择哪个企业邮箱最好用?
  17. 微信小程序 表情小作坊 — 轻松定制表情包
  18. absolute、relative详解
  19. Linux ASPM 问题一个适合的解决方案
  20. IntelliJ IDEA 小技巧:Bookmark(书签)的使用

热门文章

  1. iOS中XML解析 (一) TBXML (实例:打印xml内容及存储到数组)
  2. redis——redis简介及基本交互方法
  3. STM32的IAP在线升级的源码中的地址解读
  4. git merge 与 git rebase的区别
  5. C/C++——输入输出字符相关,cin.get()、getchar()和cin.getline()
  6. SpringBoot—JPA和JDBC常用配置说明
  7. Java—格式化日期/时间
  8. 第一条Pulsar消息发送
  9. 【Linux】shell命令学习之find
  10. 配置MyEclipse的版本为jdk1.7