文章目录

  • 前言
  • Git简介:
  • Git的诞生:
  • 集中式和分布式
  • 安装Git:
  • 创建版本库
  • 时光穿梭机(*)
  • 版本回退
  • 撤销修改
  • 删除文件
  • 远程仓库:
  • 添加远程仓库:
  • 删除远程库与本地库的链接:
  • 从远程库克隆(*)
  • 使用GitHub


前言

日常需要,但又因为用的少,所以一些命令不太熟,所以根据自己的记忆需求整理成文。整理的资料对象:《廖雪峰的Git教程》,定位:拿手即用,字典查询。

Git简介:

Git:不但能自动帮我记录每次文件的改动,还可以让同事协作编辑,这样就不用自己管理一堆类似的文件了,也不需要把文件传来传去。如果想查看某次改动,只需要在软件里瞄一眼就可以。这样,你就结束了手动管理多个“版本”的史前时代,进入到版本控制的20世纪。

Git的诞生:

Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。

集中式和分布式

先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。

Git教程-廖雪峰-个人归纳更新总结_git


分布式版本控制系统与集中式版本控制系统有何不同呢?首先,分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

Git教程-廖雪峰-个人归纳更新总结_git_02

安装Git:

  1. Linux、MacOS、Windows通用安装教程
  2. 安装完成后,还需要最后一步设置,在命令行输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。

创建版本库

什么是版本库呢?英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

在空目录下使用命令git init将该目录变成git可管理的仓库。此时当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。

$ git init
Initialized empty Git repository in XXX/.git/

使用版本库:
把大象放到冰箱需要3步相比,把一个文件放到Git仓库只需要两步。

  1. 用命令git add告诉Git,把文件添加到暂存区:
$ git add XXX

Git教程-廖雪峰-个人归纳更新总结_远程库_03

  1. 用命令git commit告诉Git,把文件提交到仓库:
$ git commit -m "wrote a readme file"
[master (root-commit) eaadf4e] wrote a readme file
 1 file changed, 2 insertions(+)
 create mode 100644 XXX

git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

为什么Git添加文件需要addcommit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件。

Git教程-廖雪峰-个人归纳更新总结_远程库_04

时光穿梭机(*)

常用命令:

  1. git status命令可以让我们时刻掌握仓库当前的状态
  2. git diff XXX查看文件最近修改的内容
  3. git log命令显示从最近到最远的提交日志,加上--pretty=oneline可以简化输出信息。
  4. git diff HEAD -- XXX查看工作区中的XXX文件与最近一次提交的XXX文件的修改

版本回退

HEAD表示当前版本,第前K个版本,就是HEAD~K

  1. 首先使用git log确定回退到哪个版本,假设回到第前K个版本,其对应的commit id的前几位是1094adb...
  2. 使用命令指定回到过去/未来的某个版本:
$ git reset --hard HEAD~K(or 1094ad)

git reflog用来记录你的每一次commitreset

撤销修改

之前提到,把文件放到Git仓库只需两步,所以撤销修改也对应几种情况:

  1. 只在工作区作了修改尚未git add时使用:
git restore <file>
  1. 只有git add尚未git commit时使用:
git restore --staged <file>
  1. 回到情况1,然后使用git restore <file>处理。
  2. 执行了git commit尚未git push
    使用版本回退
$ git reset --hard HEAD~K(or 1094ad)

删除文件

在Git中,删除操作也是一个修改
具体操作流程:

  1. 在工作区删除某个文件:
rm XXX
  1. 分情况:
  1. 确定删除:使用命令将本次操作提交到暂存区并且提交
git add/rm <file>
git commit -m "delete XXX"
  1. 误删操作:进行恢复操作:
git restore <file>

远程仓库:

Git的杀手级功能之一(注意是之一,也就是后面还有之二,之三……):远程仓库。
找一台电脑充当服务器(GitHub)的角色,每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。
前置条件:

  1. 注册一个GitHub账号
  2. 由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以需要一点设置:
  1. 创建SSH Key:
$ ssh-keygen -t rsa -C "youremail"
  1. 第2步:登陆GitHub --> Settings --> SSH Keys页面,点击New SSH Keys,然后在Key文本框里粘贴/Users/XXX/.ssh/id_rsa.pub文件的内容,从而在GitHub设置中添加自己机器的身份。

因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

添加远程仓库:

  1. 首先,登陆GitHub,然后,在右上角找到“New repository”按钮,创建一个新的仓库:
  2. Repository name中填入仓库名,其他保持默认设置后,点击Create repository后就成功地创建了一个新的Git仓库。
  3. 现在,在本地仓库目录下运行命令:
$ git remote add origin git@github.com:username/XXX.git

添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

  1. 可以把本地库的所有内容推送到远程库上:
git push -u origin main

由于远程库是空的,我们第一次推送main分支时,加上了-u参数,Git不但会把本地的main分支内容推送的远程新的main分支,还会把本地的main分支和远程的main分支关联起来,在以后的推送或者拉取时就可以简化命令使用$ git push origin main

删除远程库与本地库的链接:

  1. 建议使用$ git remote -v查看一下远程库的信息
$ git remote -v
origin  git@github.com:username/XXX.git (fetch)
origin  git@github.com:username/XXX.git (push)
  1. 根据名字删除,比如删除origin,此处的删除其实是解除本地和远程的绑定关系,并不是物理上删除了远程库。
$ git remote rm origin

从远程库克隆(*)

简单粗暴,使用命令

$ git clone git@github.com:username/XXX.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3
Receiving objects: 100% (3/3), done.

使用GitHub

如何参与一个开源项目呢?

  1. GitHub上,可以任意Fork开源仓库;
  2. 从自己的账号下clone,因为自己拥有Fork后的仓库的读写权限:
git clone git@github.com:michaelliao/bootstrap.git
  1. 如果你希望bootstrap的官方库能接受你的修改,你就可以在GitHub上发起一个pull request。当然,对方是否接受你pull request就不一定了。

其他方面用到再更…