git简单使用教程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xzpdskll/article/details/80425955

基本操作命令:
git:查看是否安装git操作工具程序
git config --global user.name "Your Name": 设置你的电脑全局git用户名
git config --global user.email "[email protected]" :设置你的电脑全局git邮箱
git init:在当前目录下初始化仓库
git add <文件名>:将你的文件(如:readme.txt)添加到git仓库管理
git commit -m "wrote a readme file" :提交你的文件到仓库
git log :查看提交日志
git log --pretty=oneline:优化后的日志查看
git reset --hard <版本号,可前缀>:回退到指定提交版本,HEAD^:表示上一次提交
git reflog:查看命令历史

1. 安装git(windows)

最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑。不过,慢慢地有人把它移植到了Windows上。现在,Git可以在Linux、Unix、Mac和Windows这几大平台上正常运行了。要使用Git,第一步当然是安装Git了。

可以从Git官网直接下载安装程序,(网速慢的同学请移步国内镜像),然后按默认选项安装即可。安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!
安装成功命令界面
安装完成后,还需要最后一步设置,打开git bash命令窗口
这里写图片描述
在命令行输入:

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

因为Git是分布式版本控制系统,所以需要设置自己的账户名字,这里是设置的全局的。
这里写图片描述
注意git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

2. 创建版本库

上一步我们安装好了git(git操作工具,接下来就需要建立我的版本库,什么是版本呢?其实就是一个仓库,英文名repository,就是用来装我们的需要管理的文件,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
所以,创建一个版本库非常简单。

首先,选择一个合适的地方(可以是你电脑的任何位置,你觉得合适的位置,当然也可以是你的开发软件的工作空间目录),创建一个空目录:

使用Windows系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文。
第二步,通过git init命令把这个目录变成Git可以管理的仓库:

$ git init
Initialized empty Git repository in E:xlosy_git/.git/

这里写图片描述
瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。
如果你没有看到.git目录,那是因为这个目录默认是隐藏的,window设置显示隐藏文件就能看见了。
这里写图片描述
也不一定必须在空目录下创建Git仓库,选择一个已经有东西的目录也是可以的。
不过,不建议你使用自己正在开发的公司项目来学习Git,否则造成的一切后果概不负责。

这时候你可以在你的仓库目录下创建你需要管理的文件,如:xlosy.txt 打开文件添加内容
这里写图片描述
把文件添加到版本库
“xlosy.txt”一定要放到xlosy_git目录下(子目录也行),因为这是一个Git仓库,放到其他地方Git再厉害也找不到这个文件。

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

$ git add xlosy.txt

这里写图片描述
第二步,用命令git commit告诉Git,把文件提交到仓库:

$ git commit -m "wrote a xlosy file"

这里写图片描述
简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
git commit命令执行成功后会告诉你,1 file changed:1个文件被改动(我们新添加的xlosy.txt文件);1 insertions:插入了一行内容(xlosy.txt有一行内容)。

Git添加文件需要先add,然后commit,因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."

3. 基本功能操作

1).版本回退

我们将xlosy.txt文件内容进行修改,如下:
welcom to xlosy world! You will learn more knowledge。
然后尝试提交:

$ git add xlosy.txt 
$ git commit -m "You will learn more knowledge。"

使用命令git log查看你的提交记录:

$ git log
commit a217b9d7d6266b97d9ee7e69c87172de8d3426a1 (HEAD -> master)
Author: sunkl <xlosy14@163.com>
Date:   Thu May 24 10:14:55 2018 +0800
    add content 'You will learn more knowledge。'
commit e6971a61987dcf0b9cbfaccfb973d5bb7350e36a
Author: sunkl <xlosy14@163.com>
Date:   Thu May 24 10:13:58 2018 +0800
    add file xlosy.txt

git log命令显示从最近到最远的提交日志,我们可以看到3次提交
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:

$ git log --pretty=oneline
a217b9d7d6266b97d9ee7e69c87172de8d3426a1 (HEAD -> master) 
add content 'You will learn more knowledge。'
e6971a61987dcf0b9cbfaccfb973d5bb7350e36a add file xlosy.txt

需要友情提示的是,你看到的一大串类似a217b…的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id和我的肯定不一样,以你自己的为准。为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。
现在回退到上一个版本:

$ git reset --hard HEAD^
HEAD is now at e6971a6 add file xlosy.txt

HEAD表示当前的提交时间点,HEAD^表示当前提交时间点的上一个时间点

然我们用git log再看看现在版本库的状态:

$ git log
commit e6971a61987dcf0b9cbfaccfb973d5bb7350e36a (HEAD -> master)
Author: sunkl <xlosy14@163.com>
Date:   Thu May 24 10:13:58 2018 +0800

    add file xlosy.txt

现在版本回到最新版本的上一个版本,使用命令查看提交日志,惊奇的发现最新的提交日志不见了,也就是未来提交的记录不见了,文件的内容也不见了,那如果想回到未来的那次提交怎么办?git reset --hard:不仅可以回退之前的版本也可以回退到未来的版本,但是你需要知道你的提交commit id ,怎么去获得呢?如果当前的git bash 窗口没有关闭就可以向上翻出之前提交的commit id。

$ git reset --hard a217b
HEAD is now at a217b9d add content 'You will learn more knowledge。'

这里的版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。

假如你已经关闭了窗口,没关系,你可以使用 git reflog命令查看历史提交记录:

$ git reflog
a217b9d (HEAD -> master) HEAD@{0}: reset: moving to a217b
e6971a6 HEAD@{1}: reset: moving to HEAD^
a217b9d (HEAD -> master) HEAD@{2}: commit: add content 'You will learn more knowledge。'
e6971a6 HEAD@{3}: commit (initial): add file xlosy.txt

这样你就可找回你想要的commit id,在使用命令: git reset --hard <commit id> 即可回到未来版本。
2)、工作去和暂存区
Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。
工作区(Working Directory)
就是你在电脑里能看到的目录,比如我的xlosy_git文件夹就是一个工作区.
版本库(Repository)
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
这里写图片描述
前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:

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

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

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
现在我们将xlosy.txt文件内容修改:

welcom to xlosy world! You will learn more knowledge。
stage and work Directory

然后,在工作区新增一个LICENSE文本文件(内容随便写)。
先用git status查看一下状态:

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   xlosy.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        LICENSE

no changes added to commit (use "git add" and/or "git commit -a")

可以看出,当前处于master主(默认)分支上,并且存在xlosy.txt文件的修改,以及未关联的LICENSE文件,
现在,使用两次命令git add,把xlosy.txtLICENSE都添加后,用git status再查看一下:

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   LICENSE
        modified:   xlosy.txt

现在,暂存区的状态就变成这样了:
这里写图片描述
所以,git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。

$ git commit -m "understand how stage works"
[master ac1290f] understand how stage works
 2 files changed, 2 insertions(+)
 create mode 100644 LICENSE

一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的,使用git status 查看:

$ git status
On branch master
nothing to commit, working tree clean

现在版本库变成了这样,暂存区就没有任何内容了:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/xzpdskll/article/details/80425955