Git的使用(一)

Git是目前世界上最先进的分布式版本控制系统,最初的版本由Linux的创造者Linus用c语言完成的,并迅速成为最流行的分布式版本控制系统,此处不对Git的功能做过多的简介,详情可以参考Git官网,下面会对Git的使用进行全方位的阐述,干货满满。

Git配置

git config --global user.name "Your Name" 配置全局的用户名

git config --global user.email "email@example.com" 配置全局的邮箱地址

git config --list 查看git配置列表


初始化版本库

git init 初始化git版本库

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit
$ git init
Initialized empty Git repository in D:/learngit/.git/

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ ls -ah
./  ../  .git/

注意:.git目录为隐藏目录,使用ls -ah可查看


工作区和暂存区

在这里插入图片描述
readme.txt文件为例,文件所在的目录就是工作区,当我们执行git add命令时,实际上是把工作区的修改添加到暂存区,然后执行 git commit 命令时,实际上是把暂存区的所有修改都添加到对应的分支上,并生成新的版本,暂存区的存在能够避免每次修改都提交一个版本,也能够避免工作区的改动过多但是未提交所产生的风险。


git add

在版本库目录下编写readme.txt文件,内容如下:

hello world

git add <file> 将工作区中的修改添加到暂存区

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git add readme.txt
warning: LF will be replaced by CRLF in readme.txt.
The file will have its original line endings in your working directory

git commit

git commit -m "desc" 将暂存区的改动提交到当前分支,生成新的版本

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git commit -m 'first'
[master (root-commit) 1b66990] first
 1 file changed, 1 insertion(+)
 create mode 100644 readme.txt

git status

git status 查看当前仓库文件的状态

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git status
On branch master
nothing to commit, working tree clean

git status -sgit status --short 查看当前仓库文件的状态(简化输出)

输出规则如下:

  • 输出标记会有两列,第一列是对暂存区域而言,第二列是对工作区而言

  • ?? 用来标记文件是新创建的未跟踪的状态

  • 第一列是 A字母, 用来标记文件是新创建的已跟踪的状态

  • 第一列是M字母,用来标记文件是有改动的已跟踪的状态

  • 第二列是M字母,用来标记文件是有改动的未跟踪的状态

  • MM表示文件上次改动被跟踪,当前改动未被跟踪

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git status -s
?? readme.txt

接下来我们跟踪一个文件从创建到提交的整个过程,来观察git status的输出

1.版本库中无文件,我们查看一下仓库文件的状态

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ ls -ah
./  ../  .git/

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git status
On branch master        #在master分支上

No commits yet          #没有提交的版本

nothing to commit (create/copy files and use "git add" to track)   #没有更改需要提交

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git status -s

执行git status后,可以看到在当前master分支上还没有提交的版本,执行git status -s 后无输出信息

2.新创建一个文件readme.txttouch readme.txt

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git status
On branch master

No commits yet

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

nothing added to commit but untracked files present (use "git add" to track)

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git status -s
?? readme.txt

执行git status后,可以看到存在未跟踪的文件readme.txt,执行git status -s 后,发现readme.txt文件之前第一列和第二列多了两个问号,表示文件为新增的并且未添加到暂存区中。

3.执行git add readme.txt,再查看一下仓库文件的状态

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   readme.txt


yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git status -s
A  readme.txt

执行git status后,可以看到存在要提交的更改(新建的文件readme.txt),执行git status -s后,发现readme.txt文件之前第一列多了一个A,表示文件的改动已添加到暂存区。

4.执行git commit -m 'first commit',再查看一下仓库文件的状态

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git status
On branch master
nothing to commit, working tree clean

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git status -s

此时暂存区的修改提交到了当前master分支上。

5.我们对readme.txt 文件进行修改,执行vim readme.txt,添加一行hello world,然后查看一下仓库文件的状态

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   readme.txt

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

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git status -s
 M readme.txt

执行git status后,可以看到文件存在改动并且改动未添加到暂存区(改变的文件readme.txt),执行git status -s后,发现readme.txt文件之前第二列多了一个M,表示工作区的readme.txt文件有改动并且未添加到暂存区。

6.再次执行git add readme.txt,然后查看一下仓库文件的状态

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   readme.txt

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git status -s
M  readme.txt

执行git status后,可以看到存在要提交的更改(改变的文件readme.txt),执行git status -s后,发现readme.txt文件之前第一列多了一个M,表示工作区的readme.txt文件有改动并且已添加到暂存区。

7.此时执行commit命令,则会输出同第4步的内容,但我们先不提交,而是修改readme.txt,执行vim readme.txt,添加一行git is very good,然后查看一下仓库文件的状态

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   readme.txt

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   readme.txt


yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git status -s
MM readme.txt

执行git status后,我们发现文件即存在要提交的更改,也存在未添加到暂存区的更改,执行git status -s后,发现readme.txt文件前面第一列和第二列分别多了一个M,表示工作区的readme.txt文件的上次改动添加到了暂存区,本次改动未添加到暂存区。

8.我们此时再提交暂存区内的改动,执行commit命令,git commit -m 'second commit',然后查看一下仓库文件的状态

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   readme.txt

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

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git status -s
 M readme.txt

执行git status后,可以看到文件存在改动并且改动未添加到暂存区(改变的文件readme.txt),执行git status -s后,发现readme.txt文件之前第二列多了一个M,表示工作区的readme.txt文件有改动并且未添加到暂存区。


git diff

git diff <file> 查看指定的工作区的文件和暂存区的不同

git diff head <file> 查看指定的工作区的文件和版本库中最新版本的不同

我们将readme.txt保证在工作区,暂存区,版本库中各不相同,然后执行命令查看效果

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git diff readme.txt
warning: LF will be replaced by CRLF in readme.txt.
The file will have its original line endings in your working directory
diff --git a/readme.txt b/readme.txt
index 0829798..176bcf6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,3 @@
 hello world
 git is very good
+i like git very much

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git diff head readme.txt
warning: LF will be replaced by CRLF in readme.txt.
The file will have its original line endings in your working directory
diff --git a/readme.txt b/readme.txt
index 3b18e51..176bcf6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1,3 @@
 hello world
+git is very good
+i like git very much

我们可以看到工作区比暂存区多了一行i like git very much,比版本库多了一行git is very good,一行i like git very much。


git log

git log 查看历史版本

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git log
commit 6763ec51e6a1f8c6191624ef12013c5b2b0f6dcd (HEAD -> master)
Author: yhc <1403125476@qq.com>
Date:   Thu Mar 11 00:12:26 2021 +0800

    second commit

commit 400662a418a8f395b22c1a9d7a2183f461677a67
Author: yhc <1403125476@qq.com>
Date:   Wed Mar 10 21:45:48 2021 +0800

    first commit

git log --pretty=oneline 查看历史版本(每个版本精简为一行)

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git log --pretty=oneline
6763ec51e6a1f8c6191624ef12013c5b2b0f6dcd (HEAD -> master) second commit
400662a418a8f395b22c1a9d7a2183f461677a67 first commit

git reflog

git reflog 查看历史操作记录

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git reflog
6763ec5 (HEAD -> master) HEAD@{0}: commit: second commit
400662a HEAD@{1}: commit (initial): first commit

版本切换

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

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git reset --hard HEAD^
HEAD is now at 1b66990 first

git reset --hard HEAD^^ 回退到上上一个版本,以此类推

git reset --hard <commit_id> 回退到指定版本,以此类推

注意:--hard的作用为工作区和要切换的版本保持一致,暂存区置为空


撤销修改

git checkout -- <file> 把指定文件在工作区的修改全部撤销到暂存区或版本库的状态,让这个文件回到最近一次git commit或git add时的状态

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git checkout -- readme.txt

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ cat readme.txt
hello world
git is very good

注意:--必须加,否则就变成了切换分支命令

git reset HEAD <file> 把指定文件的修改从暂存区中撤销掉

yhc@DESKTOP-MOGNFMV MINGW64 /d/learngit (master)
$ git reset HEAD readme.txt
Unstaged changes after reset:
M       readme.txt

删除文件

git rm <file> 把文件从工作区中删除,并把此修改添加到暂存区(相当于执行rm <file>,然后执行git add <file>

git rm --cached <file> 工作区的文件保留,但暂存区的文件删除


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值