关于Git--分布式版本控制系统(2)

我们不断的对文件进行修改,然后提交修改到版本库中,一旦将文件改乱了或者误删了文件就可以从最近的一个commit恢复,然后继续工作。

当提交比较多时,使用git log命令查看从最近到最远的提交日志,当输出信息较多时,加上--pretty=oneline参数,增加可读性


版本回退


首先Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交,上一个版本是HEAD^,上上一个版本就是HEAD^^,往上100个版本比较容易数不过来,可以写成HEAD~100


现在如果我们要回退到上一个版本,可以使用git reset命令

$ git reset --hard HEAD^
HEAD is now at ea34578 add distributed
cat命令用于显示文件内容


当回退到某个版本,又想恢复到新版本时,可以直接使用git --hard  后面跟上想要恢复的版本的commit id(没必要写全,Git会自动去找)

可以使用git reflog显示执行过的每个命令,继而查看版本的commit id


工作区和暂存区

Git和其他版本控制系统如SVN的一个不同之处在于Git有暂存区的概念

工作区即在在电脑里可以看到的目录,如新建的learngit文件夹

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


git-repo


当我们把文件添加到Git版本库时,分两步执行

第一步使用git add把文件添加进去,实际上就是把文件修改添加到暂存区

第二步使用git commit提交更改,实际上就是把暂存区的所有内容提交当当前分支

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。可以简单的理解为,需要提交的文件修改统统放到暂存区,然后,一次性提交暂存区的所有修改。


管理修改

Git比其他版本控制系统优秀,是因为Git跟踪并管理的是修改,而非文件。

如对一个文件进行下列操作

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

使用git status命令查看状态可以发现第二次的修改没有被提交,原因是因为Git管理的是修改,当使用git add命令时,工作区的第一次修改被放到暂存区,准备提交,但是在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,即只有第一次修改被提交了,第二次修改不会被提交。


那么如何提交第二次修改呢?可以继续git add再git commit ,也可以别着急提交第一次修改,先git add第二次修改,再git commit,相当于把两次修改合并后一起提交了

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

第二次修改也提交了。


撤销修改


当修改出错时,可以手动把文件恢复到上一个版本的状态,也可以使用 git checkout -- file丢弃工作区的修改。如使用git checkout --readme.txt的意思就是把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

一种是readme.txt自修改后没有被放到暂存区,现在撤销修改就回到何版本库一模一样的状态

一种是是readme.txt已经添加到暂存区后,又做了修改, 撤销修改后就回到添加到暂存区后的状态了。

总之,就是让这个文件回到最近一次git commit或git add时的状态

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


当已经把修改git add到暂存区了,使用git reset HEAD file 可以把暂存区的修改撤销掉(unstage),重新放回工作区。

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



假如你已经把暂存区提交到了版本库,可以使用版本库回退到上一个版本。不过这是有条件的,就是你还没有把自己的本地版本库推送到远程。假如把提交推送到远程版本库,就真的没办法了~~~



总结:

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

2.当改乱了工作区的某个文件的内容,还添加到了暂存区,想丢弃修改,分两步,第一步用命令git reset HEAD file,回到1,第二步按1进行操作

3.已经提交了不合适的修改到版本库时,想要撤销本次提交,可以使用版本库回退,不过前提是没有推送到远程库。


猜你喜欢

转载自blog.csdn.net/u010996775/article/details/71409543
今日推荐