Git版本控制工具

本文介绍Git版本控制系统的功能特点及基本概念,详细讲解了Git的安装步骤、工作流程与常用操作,包括配置开发者信息、添加文件、查看状态、提交文件、查看日志、创建与管理分支、文件回退、对比提交差异、取消暂存、删除文件、添加远程仓库、推送代码,以及设置忽略文件等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、认识Git
  Git是一个开源的分布式版本控制系统,它可以有效的、高速地处理从很小到非常大的项目版本管理。Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。Git适合做分布式开发,强调个体,而且本地服务器的压力和数据量都不会太大,具有速度快、灵活、支持离线工作等优点。
  Git具有以下功能特性:
    1)从服务器上克隆完整的Git仓库(包括代码和版本信息)到本机;
    2)在自己的机器上根据不同的开发目的,创建分支,修改代码;
    3)在本机上自己创建的分支提交代码;
    4)在本机上合并代码;
    5)把服务器上最新的代码fetch下来,然后跟自己的主分支合并;
    6)生成补丁(patch),把补丁发送给主开发者;
    7)解决各开发者分支合并冲突问题;

二、Git的基本概念
仓库(Repository):我们可以把一个仓库想象成一个数据库,里面存储了项目的所有版本和元数
        据(metadata),可以实现拉取或提交数据等操作;
在这里插入图片描述

工作目录(Working Directory):工作目录是对项目的某个版本独立提取出来的内容,如检出的某个
            分支的内容。这些从Git仓库的压缩数据库中提取出来的文件,放在磁
            盘上供我们使用或修改。
在这里插入图片描述

暂存区(Staging Area):暂存区是一个文件,保存了下一次将要提交的文件列表信息,一般在Git仓
          库的目录中。有时候也被称作"索引"。
         
分支(Branch):使用分支可以把我们的工作从开发主线上分离开来,以免影响开发主线。Git的分支
       ,其实本质上仅仅是指向提交对象的可变指针。Git的默认分支名字是master。 在这里插入图片描述
标签(Tag):标签是用于标记特定的点或提交的历史,通常会用来标记发布版本的名称或版本号(如:publish/0.0.1),虽然标签看起来有点像分支,但打上标签的提交是固定的,不能随意的改动。
HEAD:HEAD指向的就是当前分支的最新提交。

工作区、暂存区、本地版本库、远程版本库之间几个常用的 Git 操作流程如下图所示:
在这里插入图片描述

三、安装Git
1)进入git官网地址下载软件包
在这里插入图片描述
2)创建工作目录并查看git版本
在这里插入图片描述
四、Git的工作流程与常用操作
在这里插入图片描述
1)git config:配置开发者的用户名和邮箱,每次代码提交的时候都会生成一条提交记录,其中就
      会包含当前配置的用户名和邮箱;

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git
$ git init
Initialized empty Git repository in D:/Git/.git/

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (master)
$ git config user.name  Mr.jiang

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (master)
$ git config user.email  Mr.jiang@126.com

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (master)
$ git config --list  --local
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
user.name=Mr.jiang
user.email=Mr.jiang@126.com

2)git add:添加文件变动到暂存区(add后接.表示添加所有变动的文件);

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (master)
$ ls
test.txt

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (master)
$ cat test.txt
ths is a git testfile

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (master)
$ git add  test.txt

3)git status:查看文件变动的状态信息;

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (master)
$ git status
On branch master

No commits yet

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

        new file:   test.txt

4)git commit:提交文件变动到版本库中(-m参数可直接输入提交的描述信息);

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (master)
$ git commit -m"Add File test.txt"
[master (root-commit) fa62007] Add File test.txt
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt

5)git log:查看git的提交日志信息(-n#可查看限定的日志提交信息);

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (master)
$ git log -n1
commit fa6200780ebf00371700d15b3318558956a85512 (HEAD -> master)
Author: Mr.jiang <Mr.jiang@126.com>
Date:   Fri Sep 13 16:33:29 2019 +0800

    Add File test.txt

6)git branch:创建、重命名、查看、删除项目分支;

#查看当前分支
17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (master)
$ git branch
* master

#新建一个daily/0.0.0分支
17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (master)
$ git branch  daily/0.0.0

#重命名分支为daily/0.0.1
17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (master)
$ git branch -m  daily/0.0.0 daily/0.0.1

#-d可删除指定分支
17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (master)
$ git branch -d  daily/0.0.1

7)git checkout:切换分支,回退文件到暂存区状态;

#切换分支
17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (master)
$ git checkout daily/0.0.1
Switched to branch 'daily/0.0.1'

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (daily/0.0.1)
$ git branch
* daily/0.0.1
  master

#回退到暂存区状态
17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (daily/0.0.1)
$ cat test.txt
ths is a git testfile
17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (daily/0.0.1)
$ git add test.txt

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (daily/0.0.1)
$ cat test.txt
ths is a git testfile
l love git
17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (daily/0.0.1)
$ git checkout test.txt

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (daily/0.0.1)
$ cat test.txt
ths is a git testfile
17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (daily/0.0.1)


8)git reset:回退文件到提交区的状态(本地文件做了修改,回退到上次提交的状态);

#文件新增加了一行内容
17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (daily/0.0.1)
$ cat test.txt
ths is a git testfile
17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (daily/0.0.1)

#查看日志
$ git log  -n1
commit fa6200780ebf00371700d15b3318558956a85512 (HEAD -> daily/0.0.1, master)
Author: Mr.jiang <Mr.jiang@126.com>
Date:   Fri Sep 13 16:33:29 2019 +0800

    Add File test.txt

#用reset回退到上次状态(指明部分hash码即可)
17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (daily/0.0.1)
$ git reset --hard fa6200780
HEAD is now at fa62007 Add File test.txt

#文件已回到原始状态
17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (daily/0.0.1)
$ cat test.txt
ths is a git testfile

9)git reflog:查看回退日志信息;

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (daily/0.0.1)
$ git reflog
fa62007 (HEAD -> daily/0.0.1, master) HEAD@{0}: reset: moving to fa6200780
fa62007 (HEAD -> daily/0.0.1, master) HEAD@{1}: checkout: moving from master to daily/0.0.1
fa62007 (HEAD -> daily/0.0.1, master) HEAD@{2}: commit (initial): Add File test.txt

10)git diff:对比两次提交状态差异;

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (daily/0.0.1)
$ git commit -am"Add test.txt"
On branch daily/0.0.1
nothing to commit, working tree clean

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (daily/0.0.1)
$ git commit -am"Change test.txt"
[daily/0.0.1 c14f81f] Change test.txt
 1 file changed, 2 insertions(+), 1 deletion(-)

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (daily/0.0.1)
$ git log  -n2
commit c14f81f74efe1f5be53f4b933bec1c1f2c3d9925 (HEAD -> daily/0.0.1)
Author: Mr.jiang <Mr.jiang@126.com>
Date:   Fri Sep 13 19:24:15 2019 +0800

    Change test.txt

commit fa6200780ebf00371700d15b3318558956a85512 (master)
Author: Mr.jiang <Mr.jiang@126.com>
Date:   Fri Sep 13 16:33:29 2019 +0800

    Add File test.txt

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (daily/0.0.1)
$ git diff c14f81f7 fa620078
diff --git a/test.txt b/test.txt
index d75e2db..fceaaf5 100644
--- a/test.txt
+++ b/test.txt
@@ -1,2 +1 @@
-ths is a git testfile
-l love git
\ No newline at end of file
+ths is a git testfile
\ No newline at end of file

11)git reset HEAD:取消暂存区的文件;

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (master)
$ git add test.txt

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (master)
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   test.txt


17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (master)
$ git reset HEAD -- test.txt
Unstaged changes after reset:
M       test.txt

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (master)
$ 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:   test.txt

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

12)git rm:删除暂存区的文件;

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (master)
$ git rm test.txt  --cached
rm 'test.txt'

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (master)
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        deleted:    test.txt

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

        test.txt

13)git remote:添加一个远端仓库;

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (master)
$ git remote add github git@github.com:Jiangyiyang0322

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (master)
$ git remote -v
github  git@github.com:Jiangyiyang0322 (fetch)
github  git@github.com:Jiangyiyang0322 (push)

14)git push:推送本地代码到远程仓库;

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (master)
$ git push github test.txt

15).gitgnore文件:设置哪些内容不需要推送到远程服务器,这是一个配置文件;.gitignore不是Gi
         t命令,而是在项目中的一个文件,通过设置.gitignore的内容告诉Git哪些文件
         应该被忽略不需要推送到服务器,通过以上命令可以创建一个.gitignore文件,
         并在编辑器中打开文件,每一行代表一个要忽略的文件或目录;

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (master)
$ touch .gitignore

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (master)
$ ll .gitignore
-rw-r--r-- 1 17701 197609 0 9月  13 20:32 .gitignore

17701@LAPTOP-0NQ9VV19 MINGW64 /d/Git (master)
$ cat .gitignore
test.txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值