Git操作命令-在Git仓库里管理文件历史

一.创建版本库

1.创建空目录(这里目录名为learngit)

$ mkdir learngit

2.进入目录

$ cd learngit

3.显示当前目录

$ pwd

4.将当前目录变为Git可以管理的仓库

$ git init

 .git目录是Git来跟踪管理版本库的,要放到Git仓库的文件要放在该目录或者其子目录下

二.把文件添加到版本库

1.把文件添加到仓库(这里文件为readme.txt)

$ git add readme.txt

2.把文件提交到仓库

$ git commit -m "wrote a readme file"

commit可以一次提交很多文件,所以你可以多次add不同的文件

Git告诉我们当前没有需要提交的修改nothing to <span><span>commit</span></span>),而且,工作目录是干净(working tree clean)的。

三.修改文件、查看修改

1.查看仓库当前的状态(如:是否修改了文件、修改是否已提交、删除了什么文件等)

$ git status

2.查看具体修改了什么内容

$ git diff readme.txt

四.版本回退

每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失。

1.查看提交日志的历史记录

$ git log

简略版

$ git log --pretty=oneline

一大串类似1094adb...的是commit id(版本号)

在Git中,用HEAD表示当前版本,最新的提交上一个版本是HEAD^上上一个版本就是HEAD^^

2.回退到上一个版本

$ git reset --hard HEAD^

3.指定回到未来的某个版本

(1)只要上面的命令行窗口还没有被关掉,你就可以顺着往上找,找到那个未来版本的commit id,这里1094adb...

$ git reset --hard 1094a

(2)已经关闭了命令行,想恢复到新版本

  • 查看命令日志的历史记录(为了找commit id)
$ git reflog
  • 找到待恢复版本的commit id,用$ git reset --hard 1094a回到新版本

补充概念:

1.工作区和暂存区:

在这里learngit文件夹就是一个工作区。工作区的隐藏目录.git不算工作区,而是Git的版本库

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

2.Git管理的是修改,那么Git如何跟踪修改

每次修改,如果不用git add到暂存区,那就不会加入到commit中。

  • 第一次修改 -> git add -> 第二次修改 -> git commit

。当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。

  • 第一次修改 -> git add -> 第二次修改 -> git add -> git commit

现在把第二次修改也提交了。

五.撤销修改

1.丢弃工作区的修改

$ git checkout -- readme.txt

自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态

git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令

2.修改后已经git add到暂存区,但是还没有提交

$ git reset HEAD readme.txt

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

接下来通过命令$ git checkout <span>-- readme.txt</span>丢弃工作区的修改

3.已经提交到版本库(前提是没有推送到远程库)

想要撤销本次提交,参考四.版本回退

六.删除文件

1.从工作空间删除文件(和直接在文件管理器删除相同)

$ rm test.txt

2.从版本库删除文件

如果该文件已经提交到了版本库,从工作空间删除文件后,那么此时工作区和版本库就不一致了

$ git rm test.txt

文件就从版本库中被删除了

3.从版本库恢复工作空间误删的文件

$ git checkout -- test.txt

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

注意:从来没有被添加到版本库就被删除的文件,是无法恢复的!