Mmear's 😘.

Git学习笔记

字数统计: 1.5k阅读时长: 5 min
2018/07/18 Share

Git笔记

上次写博客已经是三个月前的事了😂,趁着暑假有时间再记点东西。

平时学习中经常能听到大佬们讨论Git,什么版本不小心回滚导致前功尽弃之类的,听着高大上,自己只能在旁边瑟瑟发抖;虽然GitHub用了也挺久了,但对于它的机制还是没多少了解,学习Git肯定离不开Github,为了赶紧赶上大佬们的步伐,自学还是要搞起来的,这篇博客就用作学习过程中的笔记。

什么是Git

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

Git是一个开源的分布式版本控制系统,用于高效地将项目的各个小特性合并建立成大项目。Git记录了项目内容改动的历史,使得多人合作修改项目内容更为方便;GitHub便使用了Git为开源项目提供存储,使得无数开源项目迁移至GitHub。Git不仅仅服务于软件开发人员,像是设计师之类的人群也可以使用Git来高效地管理他们的工作。

版本控制

版本控制系统(Version Control System)用于记录并保存单个文件或一系列文件的改动,这样过段时间你还能回来找到原来的版本,版本控制系统对于图像设计师和web设计师是非常有用的,像是布局和图片的改动,VCS能够帮助他们比较两个版本的区别,如果讨厌现在的设计,随时可以恢复到之前的版本👌

版本控制系统分为:

  • 本地版本控制系统(Local Version Control Systems)
  • 中心版本控制系统(Centralized Version Control Systems
  • 分布式版本控制系统(Distributed Version Control Systems

Git属于第三种,这类版本控制系统不仅拥有一个服务器存储历史仓库(repositories),并且每个客户端都有一份历史仓库的完整镜像拷贝;这样下来,即使服务器挂掉,也可以用任意一个镜像出来的本地仓库恢复。因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。

更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。 你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。

常用命令

  • git init
    将当前目录变成Git仓库
  • git add file
    添加文件快照放入至暂存区,等待commit
  • git commit -m description
    提交更新,将暂存区的快照永久存储到Git仓库目录
  • git status
    查看Git仓库当前状态
  • git diff
    比较工作目录中当前文件和暂存区快照之间的差异,即修改后还未暂存起来的变化内容
    • git diff --cached
      比较已暂存内容和仓库分支的内容
  • git log
    查看提交历史信息
  • git reflog
    查看命令历史信息(可用于帮助从旧版本迁移至新版本)
  • git checkout -- file
    将工作区文件修改还原(还未暂存),即修改为版本库最新版本
  • git reset HEAD -- file
    已暂存的文件内容退回至工作区,放弃修改,此时再用上一条命令可完全还原为原来版本
    • git reset --hard HEAD
      前两条命令的组合
  • git reset --hard id|HEAD
    回退或前进到指定版本
  • git rm file
    删除暂存区的文件

一些概念

Git 有三种状态,你的文件可能处于其中之一:
已修改(modified)
表示修改了文件,但还没保存到数据库中。
已暂存(staged)
已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
已提交(committed)
表示数据已经安全的保存在本地数据库中。

Git中有三个区域的概念:
Git仓库目录(Repository):Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据,即.git文件夹中的文件。

工作目录(Working Directory):即当前的工作目录,含有对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。

暂存区域(Staging Area):是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。

注意:commit之后并不会清空暂存区域,所以当按照modified-add-commit-modified的顺序操作后,会出现工作目录、暂存区域、版本库三者内容不同的情况;因此可以用diffdiff --cached命令分别获得修改信息。

其他问题

git pull拉取远程仓库时出现合并冲突

更新某个本地仓库时遇到了这个问题,流程是在拉取更新前,使用git stash获取当前分支的工作状态,包括未追踪的文件和暂存的变更,然后储藏在堆栈上;

1
2
3
4
5
$ git stash
Saved working directory and index state \
"WIP on master: 049d078 added the index file"
HEAD is now at 049d078 added the index file
(To restore them type "git stash apply")

然后使用git pull拉取远程仓库,随后采用git stash pop将储藏应用并移出堆栈,理所当然地出现了合并冲突:

1
2
Auto-merging c/environ.c
CONFLICT (content): Merge conflict in layout/background.ejs

打开冲突的文件,修改完冲突后,再进行提交流程即可;

CATALOG
  1. 1. Git笔记
    1. 1.1. 什么是Git
    2. 1.2. 版本控制
    3. 1.3. 常用命令
    4. 1.4. 一些概念
    5. 1.5. 其他问题
      1. 1.5.1. git pull拉取远程仓库时出现合并冲突