文章目录

  • 下载安装
  • 版本库及其使用
    • 创建版本库
    • 版本创建
    • 版本回退
    • 工作区和缓存区
    • 修改管理
    • 文件比较
    • 文件删除
  • 分支管理
    • 分支创建与合并
    • 分支冲突
    • 分支管理策略[^2]
    • bug分支
  • GitHub 应用 git
    • 账号创建与绑定
    • 代码克隆与上传

git 是什么?Wiki上是这么讲的:git 是用于Linux 内核开发的版本控制工具。它采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。git的速度很快,而最为出色的是它的合并追踪(merge tracing)能力。 1

用人话讲,就是能控制代码版本的东西。最为开发者,往往更多的是用它与 Github 交互,当然,git 也可以提交代码到别的平台,这一点我们后面再讲。

这里,我们先给一个简明教程的链接,可以帮助你在5分钟内熟悉 git 的使用。当然,它过于简略,也许你需要本文来帮助你解读当中的一些要点。git - the simple guide

这里还有一个网页教程,采用游戏的方法学习 git ,不妨玩一玩,增进你对 git 的理解。Learn Git Branching

当然,如果你已经熟练掌握了 git,不妨看看事无巨细的 git documention

好耶!废话终于讲完了!进入正题!

下载安装

工欲善其事,必先利其器。

程序员欲善 git,必先安装 git。

​ ——《论语 · 没有说过》

首先你需要下载安装 git 。地址在这里git-scm.com/downloads。

下载并安装。按照如图所示进行选择。

在见到如下界面时,按照你的喜好进行选择。例如我自己选择的是 vim 。如果你不熟悉 vim ,你就先去学习 vim你也可以选择 notepad 或者 vscode 等编辑器。

注意!网上不少教程在下图所示界面会让你选择 Let Git Decide,但由于 GitHub 已经将主分支名字改为 main,所以为了后续方便,把它改成 main!

接下来一路next,完成安装。

版本库及其使用

创建版本库

前面说到,git 是用来进行版本控制的。为了实现这一目标,我们需要首先告诉 git ,我们需要进行版本控制的代码在哪里。

新建或使用原有的文件夹,进入文件夹,右键点击 Git Bash Here,打开如下所示页面

我的电脑用户名是83442@chenyang,前面选择的文件夹为E:\code,这个每个人都不一样。

输入git init,界面上会显示

83442@Chenyang MINGW64 /e/code
$ git init
Initialized empty Git repository in E:/code/.git/83442@Chenyang MINGW64 /e/code (main)
$

说明我们已经初始化成功。

版本创建

下面,我们在版本库中创建版本。

首先我们通过touch命令新建一个文件,比如叫做code.txt,并使用vim进行编辑,我们将它的内容修改为Hello, world!(程序员的 DNA 动了):

83442@Chenyang MINGW64 /e/code (main)
$ touch code.txt83442@Chenyang MINGW64 /e/code (main)
$ vi code.txt83442@Chenyang MINGW64 /e/code (main)
$ cat code.txt
Hello, world!

如果你不会使用 vim,也可以在文件夹中打开文件,用别的编辑器修改。

然后我们为 code.txt 创建一个版本version1.0。

83442@Chenyang MINGW64 /e/code (main)
$ git add code.txt
warning: LF will be replaced by CRLF in code.txt.
The file will have its original line endings in your working directory83442@Chenyang MINGW64 /e/code (main)
$ git commit -m "version1.0"
[main (root-commit) 7be1bd8] version1.01 file changed, 1 insertion(+)create mode 100644 code.txt

其中,version1.0可以替换成你想要的内容,用来命名你当前的版本。

查看我们刚刚创建的版本:

83442@Chenyang MINGW64 /e/code (main)
$ git log
commit 7be1bd88fe8def114c34acc8f51617ce90044a34 (HEAD -> main)
Author: ** <**@**.com>
Date:   Fri Jan 1 00:00:00 2021 +0800version1.0

Author 处是我的 Github 用户名和邮箱所以隐去了。

这里面显示的一些信息非常重要,我们后面会进行讲解。

下面,我们再在 code.txt 中增加一行AMD, YES!(Intel低声说了句:F**k)

83442@Chenyang MINGW64 /e/code (main)
$ vi code.txt83442@Chenyang MINGW64 /e/code (main)
$ cat code.txt
Hello, world!
AMD, YES!

再创建一个版本version1.1

83442@Chenyang MINGW64 /e/code (main)
$ git add code.txt
warning: LF will be replaced by CRLF in code.txt.
The file will have its original line endings in your working directory83442@Chenyang MINGW64 /e/code (main)
$ git commit -m "version1.1"
[main 5090356] version1.11 file changed, 1 insertion(+)83442@Chenyang MINGW64 /e/code (main)
$ git log
commit 50903560253d0f177d8433dcd4a766c1731e9ab1 (HEAD -> main)
Author: ** <**@**.com>
Date:   Fri Jan 1 00:00:01 2021 +0800version1.1commit 7be1bd88fe8def114c34acc8f51617ce90044a34
Author: ** <**@**.com>
Date:   Fri Jan 1 00:00:00 2021 +0800version1.0

版本回退

如果我们不小心 commit 错了代码,想回到以前的版本怎么办?

如果你观察仔细的话,会发现我们之前每次 commit 都会出现 (HEAD -> main)。这个 main 是我们的默认分支,而HEAD就指向我们的最新版本!因此,要想回退,只要改变HEAD的指向就行了。

83442@Chenyang MINGW64 /e/code (main)
$ git reset --hard HEAD^
HEAD is now at 7be1bd8 version1.083442@Chenyang MINGW64 /e/code (main)
$ cat code.txt
Hello, world!

可以看到,code.txt 回到了第一次 commit 时的样子。

上面的指令中,HEAD^是什么意思呢?我们用HEAD^表示当前版本的上个版本,用HEAD^^表示当前版本的上上个版本,……以此类推。

当然我们也可以使用HEAD~1表示当前版本的上个版本,用HEAD~2表示当前版本的上个版本,……以此类推。

现在,产品经理打了个电话给我,又想要version1.1了怎么办?git log看看:

83442@Chenyang MINGW64 /e/code (main)
$ git log
commit 7be1bd88fe8def114c34acc8f51617ce90044a34 (HEAD -> main)
Author: ** <**@**.com>
Date:   Fri Jan 1 00:00:00 2021 +0800version1.0

发现只剩下version1.0了!!!呜呜呜,回不去了~~~

真的吗?我不信。

​ ——鲁豫

假的。

git 要是这都干不了,趁早卸载得了。

但是,HEAD指针就跟我的成绩一样,只退不进。我们得想点别的法子。git reflog查看操作记录:

83442@Chenyang MINGW64 /e/code (main)
$ git reflog
7be1bd8 (HEAD -> main) HEAD@{0}: reset: moving to HEAD^
5090356 HEAD@{1}: commit: version1.1
7be1bd8 (HEAD -> main) HEAD@{2}: commit (initial): version1.0

妙啊!我们看到了每次操作都有一串代号(也就是代码中的7be1bd850903567be1bd8),我们把刚刚的操作撤回不就好了嘛!

83442@Chenyang MINGW64 /e/code (main)
$ git reset --hard 5090356
HEAD is now at 5090356 version1.1

可以看到,我们又回到了版本 version1.1 。

工作区和缓存区

再看一遍我们创建版本 version1.1 时的代码:

$ git add code.txt
$ git commit -m "version1.1"

发现了吗,在 commit 之前,我们还有 add 操作。这是干什么的呢?请看下图

一图胜千言。

​ ——不著名计算机科学家chenyang

这张图应当说是一目了然了。在 commit 之前,我们要把需要 commit 的文件塞到缓冲区,告诉 git:“你给我 commit 这些文件!”不然,要是我们不小心把学习资料放在文件夹里,git 岂不是也一并帮我们 commit 上去了?

我们用实例来验证一下这个机制。编辑code.txt

83442@Chenyang MINGW64 /e/code (main)
$ vi code.txt83442@Chenyang MINGW64 /e/code (main)
$ cat code.txt
Hello, world!
AMD, YES!
chenyang is so shuai!

不经过add,直接提交

83442@Chenyang MINGW64 /e/code (main)
$ git commit -m "version1.2"
On branch main
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified:   code.txtUntracked files:(use "git add <file>..." to include in what will be committed)no changes added to commit (use "git add" and/or "git commit -a")83442@Chenyang MINGW64 /e/code (main)
$ git log
commit 50903560253d0f177d8433dcd4a766c1731e9ab1 (HEAD -> main)
Author: ** <**@**.com>
Date:   Fri Jan 1 00:00:01 2021 +0800version1.1commit 7be1bd88fe8def114c34acc8f51617ce90044a34
Author: ** <**@**.com>
Date:   Fri Jan 1 00:00:00 2021 +0800version1.0

果然,没有成功提交。

修改管理

现在我们把 code.txt add 进去:

83442@Chenyang MINGW64 /e/code (main)
$ git add code.txt

这时候,你的女朋友说:“我今天才学会了vim(而你却不会),我来给你展示一下!”说罢,便修改了你的 code.txt:

83442@Chenyang MINGW64 /e/code (main)
$ vi code.txt83442@Chenyang MINGW64 /e/code (main)
$ cat code.txt
Hello, world!
AMD, YES!
chenyang is so shuai!
cai guai!

哎呀!谁动了我的代码!

幸好,原来的代码已经存在缓存区了,我们使用checkout命令把缓存区的代码调进工作区:

83442@Chenyang MINGW64 /e/code (main)
$ git checkout -- code.txt83442@Chenyang MINGW64 /e/code (main)
$ cat code.txt
Hello, world!
AMD, YES!
chenyang is so shuai!

你长呼了一口气。这时候,产品经理突然来电话了:“不要 commit!不要 commit!把它从缓存区拿出去!”

???血压飙升!

【工具】git 入门相关推荐

  1. git 强制更新远程_版本控制管理工具git的常见指令合集

    今天小千就来给大家介绍一下git中比较常见的指令合集,方便大家使用git,建议收藏起来方便日后查阅. 一.常见的命令 git help <command> # 显示command的help ...

  2. GoLang语言多版本管理工具--GVM入门介绍

    GoLang语言多版本管理工具--GVM入门介绍 GVM 由Josh Bussdieker(jbuss,jaja,jbussdieker)在Moovweb工作期间 GVM提供了一个管理Go版本的界面. ...

  3. git入门_绝对入门的Git

    git入门 by Shahzan 由Shahzan 绝对入门的Git (Git for Absolute Beginners) If you're new to the programming wor ...

  4. git入门与实践【转】

    转自:http://www.cnblogs.com/shenhaocn/archive/2011/03/13/1982957.html 什么是版本控制 要了解什么是git,首先需要了解什么是版本控制( ...

  5. 【Java从0到架构师】git 入门和基本应用

    git 核心原理剖析和基本应用 Git 入门 初始化版本库 把文件添加到版本库 查看日志 版本号问题 Git - 时间穿梭机 版本仓库的原理 查看版本库状态 - git status 查看差异 - g ...

  6. [转]Windows环境中使用版本管理工具 Git

    Git 是一个分布式版本控制工具 Git --- The stupid content tracker(傻瓜内容跟踪器),Linus 是这样给我们介绍 Git 的. Git 是用于 Linux 内核开 ...

  7. Git 入门最佳实践

    Git 入门最佳实践 前言 Git简介 实用主义 深入探索 总结 参考资料 前言 Git 是程序员学习和工作都离不开发工具,今天和大家分享 Git 常用命令总结. Git简介 Git 是一种分布式版本 ...

  8. 完全掌握git入门到精通各类免费书籍整理

    大型软件项目开发,多人群组开发都离不开的版本控制工具 git,命令简单,想要完全掌握却需要付出一点时间.我们将一些评价较高的git免费学习资料网站做了整理,收录到 学习使用git完全指南各种免费书籍分 ...

  9. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)

    首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...

  10. Git入门最终集!SSH公钥是乱码怎么办?IDEA与Git!将自己的代码上传至远程仓库!

    Git入门最终集!SSH公钥是乱码怎么办?IDEA与Git!将自己的代码上传至远程仓库! 一.更改用户名和主机名! 因为当时Windows设置的用户名为中文名称,导致生成的SSH密钥是乱码非常难受,原 ...

最新文章

  1. Windows下安装XAMPP,Wordpress
  2. marlin固件烧录教程_ESP32 MicroPython教程:uPyCraft IDE入门
  3. flink介绍:有界流和无界流
  4. 洛谷——P2871 [USACO07DEC]手链Charm Bracelet
  5. 导购提成怎么算_空调选购,别问“小白”问题,问导购这几个参数,才会显得内行...
  6. IDEA设置谷歌浏览器和火狐浏览器打开
  7. 会议交流 | 大规模知识图谱的构建及应用分享
  8. 西单大悦城苹果店4s_“神秘列车”复活!金融街-西单,3号免费专线今天回归...
  9. mysql脚本之家_详细讲述MySQL中的子查询操作 (来自脚本之家)
  10. 【渝粤教育】国家开放大学2019年春季 2610药剂学 参考试题
  11. SpringMVC学习(二)使用注解开发SpringMVC
  12. 重装系统解决:CUPS服务未启动,不能管理打印机
  13. java 创建线程的三种方式、创建线程池的四种方式
  14. Netbean 打开报 Cannot locate java installation in specified jdkhome: ***错误
  15. 三峡大学本科毕业论文答辩PPT模板
  16. 图片标签及以图搜图场景应用
  17. Android报错:Only fullscreen activities can request orientation的解决方法
  18. 蚂蚁笔记(leanote)搭建
  19. CAD中插入外部参照字体会变繁体_CAD绘图外部参照的使用方法
  20. zxing换行_为什么我的word里的横线上写完一行字不能自动换行,?

热门文章

  1. ffmpeg 图片转视频视频合并
  2. 浏览器提示ssl证书过期怎么办
  3. 如何获得免费二级域名?仅需这一步
  4. 优麒麟mysql_Ubuntu kylin优麒麟下配置Hive环境
  5. node.js+小程序基于微信小程序的校园失物招领系统毕业设计源码072343
  6. 使用Lombok的@AllArgsConstructor注解依赖注入时出现的错误解决
  7. python 接收外部参数_python 接收处理外带的参数方法
  8. centos8以后版本突然不能上网解决
  9. K8S Runtime CRI OCI contained dockershim 理解
  10. 【菜鸟进阶之路】P2141 珠心算测验 - 洛谷