Git的安装和使用

Git简介

Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
github和git是两个东西,github是一个社区,git是一个服务系统,github只支持git分布式系统,所以故名成为github。

Git的基本概念

工作区:就是你在电脑里能看到的目录,编写代码的地方。
暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。
在这里插入图片描述

Git安装

Git官方网站
点击页面中的 Download for Windows 按钮,将自动下载Git安装包。
简洁版:下载后双击安装包,然后无脑next即可。
详细版:可以参考这位大神的博客。Git 详细安装教程(详解 Git 安装过程的每一个步骤)
在这里插入图片描述

Git常用命令

命令名称作用
git config --global user.name 用户名设置用户签名
git config --global user.email 邮箱设置用户签名
git init初始化本地库
git status查看本地库状态
git add 文件名添加到暂存区
git commit -m “日志信息” 文件名提交到本地库
git reflog查看历史记录
git reset --hard 版本号版本穿梭

设置用户签名

第一次使用Git需要设置一个用户签名。

说明: 签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确定本次提交是谁做的。Git首次安装必须设置一下用户签名,否则无法提交代码。
注意 :这里设置用户签名和将来登录GitHub(或其他代码托管中心)的账号没有任何关系。

用户名配置,"admin"就是需要配置的用户名
邮箱配置,"admin@123.com"就是需要配置的邮箱

git config --global user.name admin
git config --global user.email admin@123.com

初始化本地库

首先进入项目文件的目录下,然后右击,点击 Git Bash Here 即可进到界面中去。

基本语法:
首先初始化本地库的命令 git init
初始化完成后,生成一个.git的隐藏文件,可以使用 ll -a 命令查看

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo
$ git init
Initialized empty Git repository in D:/git-demo/.git/

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master)
$ ll -a
total 68
drwxr-xr-x 1 kylin 197121 0  119 11:50 ./
drwxr-xr-x 1 kylin 197121 0  119 11:47 ../
drwxr-xr-x 1 kylin 197121 0  119 11:50 .git/

查看本地库状态

首次查看(工作区没有任何文件)

使用 git status 命令查看git的状态,返回的三行结果分别是:

  1. 提示你当前的本地库在那个分支里面【这里是在master里面】
  2. 目前还没有东西需要提交,或者是还没有提交过东西
  3. 没有什么东西需要提交
kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master)
$ git status
On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)

新增文件(hello.txt)

在当前目录下,创建一个hello.txt的文件

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master)
$ ll
total 1
-rw-r--r-- 1 kylin 197121 240  119 12:12 hello.txt

再次查看(检测到未追踪的文件)

这次发现第三行的反馈结果变了,这说明发现未被追踪的文件,hello.txt虽然有,但只存在工作区

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master)
$ git status
On branch master

No commits yet

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

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

添加暂存区

使用 git add <file>... 命令将工作区的文件添加到暂存区,查看状态,发现第三行的反馈结果发生变化,这说明当前的git追踪到这个文件。
此文件已在暂存区,在暂存区的文件可以被删除,使用 git rm --cached <file>... 命令可以删除暂存区的文件,但是本地没有删除。
删除文件后的status状态就和之前是一样的,后续在添加即可

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master)
$ git add hello.txt
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working directory

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master)
$ git status
On branch master

No commits yet

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

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master)
# 暂存区的文件是可以被删除的,这个命令就是从暂存区删除该文件,但是本地没有删除
$ git rm --cached hello.txt
rm 'hello.txt'

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master)
$ git status
On branch master

No commits yet

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

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

提交本地库

使用 git commit -m "日志信息" 文件名 便可以将文件提交到本地库,返回的信息中: 14754e6 是版本号, No commits yet 没有了,说明当前已经有了自己的版本信息了, nothing to commit, working tree clean 说明提交后的文件既没有新增,也没有修改。

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master)
$ git commit -m "first commit" hello.txt
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working directory
[master (root-commit) 14754e6] first commit
 1 file changed, 10 insertions(+)
 create mode 100644 hello.txt

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master)
$ git status
On branch master
nothing to commit, working tree clean

历史版本

查看历史版本

git reflog 可以查看当前版本库的提交历史,凡是对仓库版本进行迭代的都会出现在这个里面,包括你回滚版本都会出现在这个历史中。
git log 就是版本的详细信息,例如 14754e6e57b7b…14754e6 的详细版本号

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master)
$ git reflog
14754e6 (HEAD -> master) HEAD@{0}: commit (initial): first commit

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master)
$ git log
commit 14754e6e57b7b689bcb28b6e365e40765435237b (HEAD -> master)
Author: “admin” <“admin@123.com”>
Date:   Thu Jan 19 14:05:33 2023 +0800

    first commit

回滚代码仓库

使用 git reset --hard 版本号 的命令,可以将代码回滚到之前的版本
reset 参数是重置命令
–hard 是重置代码仓库版本

有三种模式:–soft 、–mixed 以及 --hard 是三个恢复等级。
使用 --soft 就仅仅将头指针恢复,已经 add 的暂存区以及工作空间的所有东西都不变。
如果使用 --mixed ,就将头恢复掉,已经 add 的暂存区也会丢失掉,工作空间的代码什么的是不变的。
如果使用 --hard ,那么一切就全都恢复了,头变, aad 的暂存区消失,代码什么的也恢复到以前状态。

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master)
$ git reflog
797beaa (HEAD -> master) HEAD@{0}: commit: third commit
547e394 HEAD@{1}: commit: second
14754e6 HEAD@{2}: commit (initial): first commit

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master)
$ git reset --hard 547e394
HEAD is now at 547e394 second

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master)
$ git reflog
547e394 (HEAD -> master) HEAD@{0}: reset: moving to 547e394
797beaa HEAD@{1}: commit: third commit
547e394 (HEAD -> master) HEAD@{2}: commit: second
14754e6 HEAD@{3}: commit (initial): first commit

Git分支操作

分支的简介

使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。

分支的好处

同时并行推进多个功能开发,提高开发效率。各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。

分支的常用命令

命令名称作用
git branch 分支名创建分支
git branch -v查看分支
git checkout 分支名切换分支
git merge 分支名把指定的分支合并到当前分支上

查看、创建分支

使用 git branch -v 查看当前所有分支,然后使用 git branch 分支名 创建一个新的分支,这里使用 hot-fix 作为分支名,然后再查看所有分支就可以看到新创建的分支。

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master)
$ git branch -v
* master 797beaa third commit

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master)
$ git branch hot-fix

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master)
$ git branch -v
  hot-fix 797beaa third commit
* master  797beaa third commit

切换分支

使用 git checkout 分支名 可以切换分支,可以看到切换前后末尾的分支名有所变化,已经查看分支时,分支前面的 * 号也有所改变,就说明已经切换分支了。

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master)
$ git branch -v
  hot-fix 797beaa third commit
* master  797beaa third commit

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master)
$ git checkout hot-fix
Switched to branch 'hot-fix'

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (hot-fix)
$ git branch -v
* hot-fix 797beaa third commit
  master  797beaa third commit

合并分支

使用 git merge 分支名 命令将分支合并。注意,是将 hot-fix 合并到 master 里面的。

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master)
$ git merge hot-fix
Updating 797beaa..21e3e7e
Fast-forward
 hello.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
产生冲突

原因:合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git 无法替我们决定使用哪一个,必须人为决定新代码内容。

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master)
$ git merge hot-fix
Auto-merging hello.txt
CONFLICT (content): Merge conflict in hello.txt
Automatic merge failed; fix conflicts and then commit the result.

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master|MERGING)
$ git status
On branch master
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)
        both modified:   hello.txt

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

手动的在冲突的文件里重新编写并保存,然后再上传到暂存区,并执行提交。

注意:此时使用 git commit 命令时不能带文件名

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master|MERGING)
$ vim hello.txt

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master|MERGING)
$ git add hello.txt

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master|MERGING)
$ git commit -m "master-hot-fix" hello.txt
fatal: cannot do a partial commit during a merge.

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master|MERGING)
$ git commit -m "master-hot-fix"
[master 4105ded] master-hot-fix

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master)

GitHub操作

GitHub官网

创建远程仓库

登录GitHub之后,创建一个远程库。

在这里插入图片描述
在这里插入图片描述

远程仓库操作

命令名称作用
git remote -v查看当前所有远程地址别名
git remote add 别名 远程地址起别名
git push 别名 分支推送本地分支上的内容到远程仓库
git clone 远程地址将远程仓库的内容克隆到本地
git pull 远程库地址别名 远程分支名将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并

创建远程库别名

使用 git remote add 别名 远程地址 命令,给远程库创建一个别名,目的是方便我们的操作。

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master)
$ git remote add git-demo https://github.com/Kylin-46/git-demo.git

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master)
$ git remote -v
git-demo        https://github.com/Kylin-46/git-demo.git (fetch)
git-demo        https://github.com/Kylin-46/git-demo.git (push)

推送本地分支到远程仓库

使用 git push 别名 分支 将分支上传到远程仓库

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master)
$ git push git-demo master
Enumerating objects: 21, done.
Counting objects: 100% (21/21), done.
Delta compression using up to 8 threads
Compressing objects: 100% (14/14), done.
Writing objects: 100% (21/21), 1.58 KiB | 537.00 KiB/s, done.
Total 21 (delta 7), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (7/7), done.
To https://github.com/Kylin-46/git-demo.git
 * [new branch]      master -> master

拉取远程仓库到本地

使用 git pull 远程库地址别名 远程分支名 将远程仓库中的代码拉取到本地

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo (master)
$ git pull git-demo master
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 657 bytes | 5.00 KiB/s, done.
From https://github.com/Kylin-46/git-demo
 * branch            master     -> FETCH_HEAD
   4105ded..3a4abea  master     -> git-demo/master
Updating 4105ded..3a4abea
Fast-forward
 hello.txt | 1 +
 1 file changed, 1 insertion(+)

克隆远程仓库到本地

使用 git clone 远程地址 将远程仓库中的代码克隆到本地

kylin@DESKTOP-1JHN2EV MINGW64 /d/git-demo/git-test (master)
$ git clone https://github.com/Kylin-46/git-demo.git
Cloning into 'git-demo'...
remote: Enumerating objects: 24, done.
remote: Counting objects: 100% (24/24), done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 24 (delta 8), reused 20 (delta 7), pack-reused 0
Receiving objects: 100% (24/24), done.
Resolving deltas: 100% (8/8), done.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值