git学习记录

Posted 岳飞传

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git学习记录相关的知识,希望对你有一定的参考价值。

git 学习笔记

git介绍

git 学习参考lainxuefeng

1. 创建版本库

  • git init
  • git add xx
  • git commit -m “xxx”
  • git status
  • git diff
  • git log
    如果嫌输出信息太多,看得眼花缭乱的,可以试试加上–pretty=oneline参数:

git log --pretty=oneline

需要友情提示的是,你看到的一大串类似db3976…的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示

2. 回退版本

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb…(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。

  • git reset
    回退到上一个版本,使用命令为:
    git reset --hard HEAD^

    想要回到 “command git checkout”
    需要执行
    git reset --hard 5730
    回退到刚才被删除的节点
    详解请参考廖雪峰版本回退
  • 2.2 git reflog
    查看操作记录

现在总结一下:

  • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
  • 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
  • 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本

3. 工作区和暂存区

  • 工作区(Working Directory):本地能看到的目录
  • 版本库(Repository)
    工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
  • 暂存区(statge):Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

我们把文件往Git版本库里添加的时候,是分两步执行的:

  1. 第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
  2. 第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

4.管理修改

Git跟踪并管理的是修改,而非文件。

  • 涉及到git diff

git diff 解析

git diff命令比较的是工作目录中当前文件与暂存区快照之间的差异,也就是修改之后还没有暂存起来的变化内容。

分为两种情况,一种是当暂存区中有文件时,另一种是暂存区中没有文件。

  • (1)当暂存区中没有文件时,git diff比较的是,工作区中的文件与上次提交到版本库中的文件。

  • (2)当暂存区中有文件时,git diff则比较的是,当前工作区中的文件与暂存区中的文件。

git diff HEAD -- file,比较的是工作区中的文件与版本库中文件的差异。HEAD指向的是版本库中的当前版本,而file指的是当前工作区中的文件。

注意:git diff本身只显示尚未暂存的改动,而不是自上次提交以来所做的所有改动。所以,有时候你一下子暂存了所有更新过的文件后,运行git diff后却什么也没有,就是这个原因。

如果要查看已暂存的将要添加到下次提交里的内容,可以使用git diff --cached或者git diff --staged

5.撤销修改

撤销修改的三个场景

  • 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file

  • 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。

  • 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节:git reset --hard commit_id,不过前提是没有推送到远程库。

  • 场景4:已经提交修改版本库,回退到之前的某个节点,但是像保留修改。(将修改撤回到暂存区)
    git reset --soft commit_id
    git reset –-soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可;
    git reset HEAD file
    将修改撤回到工作区

6.删除文件

在Git中,删除也是一个修改操作.

  • 一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了

$ rm test.txt

这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了:

现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm file删掉,并且git commit提交:

小提示:先手动删除文件,然后使用git rm <file>git add<file>效果是一样的

  • 另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:

git checkout – test.txt

git checkout file其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以"一键还原"。

7.远程仓库

7.1 添加远程库

  • 注册github账号,并创建远程仓,具体参照廖雪峰远程仓创建
    在GitHub上的这个learngit仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。
  • 添加远程仓:
    根据GitHub的提示,在本地的learngit仓库下运行命令

git remote add origin git@github.com:songpfei/learngit.git

添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。
更多远程仓操作见link
查看关联的远程仓库
git remote -v

  • 就可以把本地库的所有内容推送到远程库上:

$ git push -u origin master

由于github创建的默认仓已经在初始化的时候commit 了read.me文件,报错,解决方案见lin’k
git仓库中已经有一部分代码,所以它不允许你直接把你的代码覆盖上去。于是你有2个选择方式:
1,强推,即利用强覆盖方式用你本地的代码替代git仓库内的内容

git push -f

2,先把git的东西fetch到你本地然后merge后再push

$ git fetch
$ git merge

这2句命令等价于

$ git pull

再次执行:git push -u origin master,将本地仓内容推送至远程仓

7.2 从远程库克隆

获取远程仓的地址,用命令git clone克隆一个本地库
Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快

有序列表:Ctrl/Command + Shift + O
无序列表:Ctrl/Command + Shift + U
插入链接:Ctrl/Command + Shift + L

以上是关于git学习记录的主要内容,如果未能解决你的问题,请参考以下文章

Git学习收获

Git-远程仓库

Git使用记录 NO1

古代皇后有多少种叫法?

Git操作命令3-远程仓库操作

Git 命令记录