git命令行操作小结(一)

创建一个版本库

首先选择一个合适的地方,创建一个空目录

$mkdir learngit

$cd learngit

$pwd

$ pwd (用于显示当前目录)

这个新的仓库位于 /e/learngit

如果是windows系统,避免出现莫名其妙的问题,避免目录名(包含父目录)含有中文。

第二步,通过git init命令把这个目录变成Git可以管理的仓库

$git init

仓库建好了,而且告诉你是一个空的仓库(empty Git repository)

把文件添加到版本库

编写一个readme.txt文件,内容如下:

Git is a version control system.

一定要放到learngit目录下(子目录也行)

第一步,用命令git add告诉Git,把文件添加到仓库:

$git add readme.txt

没有任何显示,说明添加成功

第二步,用命令git commit告诉Git,把文件提交到仓库:

$ git commit -m "wrote a readme file"

提交成功,1个文件被改动,插入了1行内容。

git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容

git commit命令执行成功后会告诉你,1个文件被改动(我们新添加的readme.txt文件),插入了1行内容(readme.txt有两行内容)。

修改后提交文件

接着,我们修改readme.txt文件,改成如下内容:

Git is a version control system.

Learn Git.

运行git status命令看看结果:

上面的命令告诉我们,readme.txt被修改过了,但还没有准备提交的修改。  

git status命令可以让我们时刻掌握仓库当前的状态

git diff这个命令能看到具体修改了什么内容:

增加了一行“Learn Git.”

知道了做了什么修改之后就能放心提交到仓库了

提交修改也是两步操作,首先第一步git add

同样下面没有任何输出,即成功add

执行第二步git commit之前,我们再运行git status看看当前仓库的状态:

git status告诉我们,将要被提交的修改包括readme.txt

接下来可以提交了:

提交成功

提交后,我们再用git status命令看看仓库的当前状态:

Git告诉我们当前没有需要提交的修改,工作目录是干净的。

版本回退

git log命令查看提交的历史记录:

显示从最近到最远的提交日志

退出git log状态,在英文状态下按键盘q键即可。

如果想要看简洁一点的输出信息,加上--pretty=oneline参数:

git log --pretty=oneline

如果我们想要回退到上一个版本

首先,Git必须知道当前是哪个版本,在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,再往上很多版本即往上N个版本的话就写成HEAD~N

接着,我们用git reset命令进行回退。

回退成功

看看readme.txt的内容是不是版本add Learn Git.(cat fileName):

cat 命令用于连接文件并打印到标准输出设备上。

我们还能按照这样的方式继续回退到再上一个版本。

如果我们想要回去 add Hello 的版本

有两种方式:

第一种,在上面的命令窗口找到 add Hello 的 commit id 是 ff6896b...,于是你就可以指定回到未来的某个版本。

版本号写前几位就行了,但不能仅仅前一两位,因为可能会找到多个版本号

第二种,因为我们回退到了某个版本之后,想要恢复到回退前的版本必须找到版本id(commit id),在找不到 commit id 的情况下,Git提供了一个命令 git reflog 来记录你的每一次命令:

这样就能找到对应的版本号了


git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。

撤销修改

git checkout -- fileName

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销(丢弃工作区的修改),这里有两种情况:

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

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

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

git reset HEAD fileName

命令git reset HEAD fileName可以把暂存区的修改撤销掉(unstage),重新放回工作区。

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


场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- fileName。

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD fileName,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退,不过前提是没有推送到远程库。


删除文件

先添加一个新文件test.txt到Git并且提交:

提交成功

1. 如果要从版本库中删除该文件,那就用命令git rm删掉,并且git commit

删除成功

2. 如果在版本库中删除后想要恢复该文件,使用版本回退方式:

回到上一个版本

3. 如果在文件夹中或者用 rm 操作误删了文件,工作区和版本库就不一致,git status会告诉你删除了哪些文件:

test.txt 被删除了

因为版本库里还有,所以可以把误删的文件恢复到最新版本:

文件成功恢复

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

你可能感兴趣的:(git命令行操作小结(一))