git使用笔记

108 阅读5分钟

笔记 oring

最近主要是希望把自己的两个小项目传到GitHub上记录一下。分别是之前做的毕设和一个简单的前端相册。后面相册应该还会有相关的迭代。

笔记最主要的目的还是做个记录指南,下次要是忘记了直接就去做啊哈哈。

那么 start~

一、新建git仓库

有两种基本方式:在远程 GitHub 新建仓库,clone 到本地进行修改。或者新建本地仓库,推动到 GitHub 上。 下面来简单介绍一下这两种方法。

(1)新建本地仓库,推送到 GitHub 上: 这种方法的主要步骤如下:

# 1. 在本地新建这个文件夹下的 git 本地仓库
# 这个命令主要是在本地新建一个 git 仓库,无论当前文件夹下是否有内容。(有点好奇git原理的部分,这个时候新建的 git 仓库是什么样子的? 空白的 .git 文件夹到底是干什么用的)
$ git init

# 2. 在这个文件夹下面也可以做一些操作和修改
# 这里记录一个有意思的现象。当我当前目录下是空的时候,使用 git branch 不能看到任何和分支的信息。只有在这个目录下新增一些东西的时候,才能看到对应的分支信息。(就好像这个时候才是新建master分支的时候)比如当前是在master分支上。所以一开始新建的git仓库是空的。
$ git add . 
$ git commit -m 'test_1'

# 3. 把这个仓库和远程仓库关联起来
$ 



下面补充一些在这个过程中注意到的其他知识:

  1. git add 命令: 这实际上是一个多功能命令。可以将你的文件加入到暂存区,也可以将你的文件在修改过之后加入到暂存区,并且与之前的内容进行合并。一般来说,如果什么选择项都不添加,那么默认是将所有的内容都添加到暂存区的。但是可以通过一些选项来让添加到暂存区的是一部分新增内容。 可以用正则表达式来表示,加入你需要的部分,下面给个例子:加入所有的 txt 文件到暂存区。 git add *.txt

  2. git status 命令: 这个命令主要是查看当前目录下文件的所处状态。当所有文件都处于 commit 状态的时候,就不会显示出来。 如果当前的文件处于 changed 但是没有被放到 暂存区 的时候,或者放入了暂存区等,都会被显示出来。 但是这个命令显示出来的内容比较多,所以可能看起来不简洁。所以可以使用: git status -s or git status -short 来进行查看 A:add,已经加入到这个区域 M:modify,修改了,但是并没有加入到这个区域

  3. .gitignore 文件: 有些文件可能不需要进行跟踪(比如,编译时候产生的node_modules文件夹下内容),就可以将文件名写入这个文件内。来看看这个文件需要怎么编写~

  4. 在暂存区移除某些文件 在git 版本系统中移除某些内容,实际上就是

  5. git commit 快捷方式: 很多时候我们每次都要先 add 之后 再进行 commit,这样会导致很杂乱。这个时候可以使用 git commit -a -m 'xxxx' 来一次性完成这件事!

二、git 草稿、暂存区、提交区 的理解:

  1. 简单说说目前的理解:
  • 草稿区:就是修改了原来的文件,但是没有进行 git add 操作,也没有进行 git commit 操作
  • 暂存区:就是文件已经执行过 git add 操作,理解为放入了暂存区
  • 提交区:文件执行过 git commit 操作,就可以理解为存入了提交区

要学习的操作其实就是:

  1. 如何将文件放入暂存区、放入提交区;
  2. 如何将文件从提交区中拿出来,放入暂存区;
  3. 如何将文件从暂存区中拿出,放入草稿区
  4. 如何让草稿区回退到上一个 commit 的状态

下面来具体介绍一下 存入 & 拿出 的命令

三、git 分支方面的理解:

  1. 目前的理解:
  • commit 实际上产生的是一个一个快照(或者可以理解成实际存在的文件备份),并且这些快照会指向创造这些快照的父对象,形成一个类似树形结构。
  • branch 实际上是指向快照的指针
  • merge 操作本质上还是产生了一个新的快照。当你需要进行冲突解决的时候,需要:首先本地进行代码解决,之后使用 git add 以及 git commit 操作,产生一个对应合并之后的快照。 之后你当前所在的分支指针会指向对应的版本对象上。

有了这么多快照,如果想要回退到某个commit版本就非常容易了。

  1. 分支基本操作:
  • 新建分支:git branch [Branch_Name]
  • 切换分支:git checkout [Branch_Name]
  • 快捷命令:新建 + 切换 git checkout -b [Branch_Name]
  1. 远程分支的概念:
  • 理解:其实是在本地会有对应的远程分支(一个单独的指针,指向某个版本快照)
  • git fetch:将远程数据库上的所有更新了的 快照,都拉取到本地。并且远程的 master 指针指向了对应的版本对象上。
  • git pull:将远程数据库上对应的分支内容拉下来,之后和本地的跟踪分支合并(就是和远程同名的分支,实行merge 操作)
  1. rebase 和 cherry-pick 的使用:
  • rebase: 主要是检查出当前rebase分支,和需要合并的分支的共同祖先,并且对比其中的差异,之后在被合并的分支上,重放这些操作。之所以叫 rebase,我在想就类似之前的分支换了一个版本变化的起始位置。但是这样也容易出现一些问题。比如,之前原来分支的相关提交信息,都被合并了,很难找到之前的信息。

  • cherry-pick: 这个主要是找到之前的某个版本,将这个版本对应的变化应用到当前分支下,这个分支下后面就会出现一个新的版本快照,这个版本快照是按照之前 cherry-pick 版本中的修改,