Git学习记录

工作区 暂存区 版本库 的区别

工作区(Working Directory)

就是你在电脑里能看到的目录  

版本库(Repository)

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

暂存区(stage/index)

存在与git版本库中

三者关系

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

  • 第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
  • 第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
    因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
    你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
    1
    git add

  • 1
    git commit


(转至 廖雪峰博客)

git init – 初始化

git status – 仓库当前的状态(显示仓库文件的改动)

git add --all –添加所有改动的文件到暂存区

git commit --m "操作说明" – 将暂存区的文件提交到仓库

git diff fileName.txt – 查看文件的改动

git log – 查看仓库日志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ git log
commit c93675e1854f0b82fe02a08c7cc6376de3eeb601
Author: you520569 <846820523@qq.com>
Date: Sun Dec 11 12:08:42 2016 +0800

test

commit 3c4b36aacaa2b0e414251f456524fcf956d3badd
Author: you520569 <846820523@qq.com>
Date: Sun Dec 11 12:03:57 2016 +0800

test

commit 460ff602aa3150ad32366184f9a7703926d402da
Author: you520569 <846820523@qq.com>
Date: Sun Dec 11 11:59:41 2016 +0800

test

commit 0ad89de4bb5114d16efa45677488dfb0518f8f23
Author: you520569 <846820523@qq.com>
Date: Sun Dec 11 11:47:05 2016 +0800

init
  1. testgit commit -m "test"里的内容,可以通过log查看对仓库所有的提交(commit)记录.
  2. 每提交一个新版本,实际上Git就会把它们自动串成一条时间线
  3. commit后面的一串数字是其id(版本号)
  4. HEAD类似于头指针指向当前版本,HEAD^表示上一个版本,
    HEAD^^指向上上个版本,HEAD~100指向上100个版本.

git log --pretty=oneline – 显示简略信息的log

git reset --hard 3628164 – 回到版本号为3628164…的版本

可利用其达到版本的随意切换(只要知道版本号)

git reset -- hard HEAD^ – 回退到上一个版本

  • 回退到上一个版本后,log中就没有回退前的那个版本号,当时可以在命令窗口的历史记录中找到,可以通过git reset --hard 3628164来实现回到最初版本.
  • 或者通过git reflog(显示你的每一次命令)来找回版本号.

git checkout -- readme.txt – 撤销对readme.txt修改

readme.txt文件在工作区的修改全部撤销,这里有两种情况:

  • 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态
  • 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
  • 总之,就是让这个文件回到最近一次git commitgit add时的状态。
  • git checkout -- readme.txt 本质是利用版本库中的文件替换工作区的文件

git rm filename.txt – 删除版本库中的filename.txt文件

要更新到版本库中还需git commit

  • 若通过这种方式误删文件(版本库中文件已经删除,无法通过git checkout -- filename.txt 这种方式找回文件),只能通过版本回退找回(git reset -- hard HEAD^)

    rm filename.txt – 删除filename.txt文件

  • 注意git rmrm 的区别
    • 正常删除文件的顺序: rm -> git rm -> git commit利用rm删除工作区中的文件,若确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit
    • rm只是删除了你想删除的文件,是在工作区操作的,还没有把这个修改放到暂存区,然后你用git rm命令,就是把工作区删除文件的操作放到了暂存区的。但是如果你直接用git rm命令,就相当于直接完成了rmgitrm这两个命令,前一个命令被自动执行了。这时候你再git status一下,你就会发现,你已经把删除工作区文件这个操作放到了暂存区,只等你提交到版本库里去了。(引至网友的评论)
    • rm 后还没有git add则可以通过git checkout -- filename.txt类似形式恢复被删除的文件,若已经git add则无法用这种方法.

分支 (branch)

  • 查看分支:git branch

  • 创建分支:git branch name

  • 切换分支:git checkout name

  • 创建+切换分支:git checkout -b name

  • 合并某分支到当前分支:git merge name

  • 删除分支:git branch -d name

避免出现 filename too long问题

1
git config --global core.longpaths true

未完待续

本文标题:Git学习记录

文章作者:定。

发布时间:2016年12月11日 - 13时12分

本文字数:2,898字

原始链接:http://cocofe.cn/2016/12/11/git学习记录/

许可协议: Attribution-NonCommercial 4.0

转载请保留以上信息。