前言
环境:centos7.9 git version 1.8.3.1
Git官网
https://git-scm.com/
安装Git
[root@git ~]
查看版本
[root@git ~]
git version 1.8.3.1
git个人身份设置
git是分布式版本控制系统,所以每个开发者都应该在自己的笔记本上安装Git,然后在git上设置自己的个人身份信息。
[root@git ~]
[root@git ~]
[root@git ~]
[root@git ~]
user.name=lisi
user.emain=456789123@qq.com
color.ui=true
[root@git ~]
Git 的三大核心框架
工作区域(Working Directory):就是开发者平时存放项目代码的目录; 暂存区域(Stage):用于临时存放开发者代码的改动,事实上它只是一个文件,保存即将提交的文件列表信息; Git 仓库(Repository):就是安全存放数据的位置,git仓库有开发者提交的所有版本的数据代码,其中,HEAD 指向最新放入仓库的版本。 Git 的工作流程一般是: 1、在工作目录中添加、修改代码文件; 2、将需要进行版本管理的代码文件放入暂存区域; 3、将暂存区域的文件提交到 Git 仓库。
因此,Git 管理的文件有三种状态:已修改(modified)、已暂存(staged)和已提交(committed),依次对应上边的每一个流程。
git命令实践
1、创建并初始化一个项目目录,在该目录下进行存放编辑代码;
[root@git ~]
[root@git ~]
[root@git Dosier_Project]
Initialized empty Git repository in /root/Dosier_Project/.git/
[root@git Dosier_Project]
total 0
drwxr-xr-x 3 root root 18 Jan 31 16:15 .
dr-xr-x---. 5 root root 215 Jan 31 16:14 ..
drwxr-xr-x 7 root root 119 Jan 31 16:15 .git
[root@git Dosier_Project]
2、模拟开发工程师开发代码文件
[root@git Dosier_Project]
[root@git Dosier_Project]
[root@git Dosier_Project]
3、git add把代码文件提交到暂存区
[root@git Dosier_Project]
nothing added to commit but untracked files present (use "git add" to track)
[root@git Dosier_Project]
[root@git Dosier_Project]
[root@git Dosier_Project]
4、git commit 把暂存区的所有文件提交到git仓库 git commit 是把暂存区的所有文件提交到git仓库,并不是指提交某个文件。
[root@git Dosier_Project]
[master (root-commit) c2b3806] lisi add dossier.sh file
1 file changed, 2 insertions(+)
create mode 100644 dossier.sh
[root@git Dosier_Project]
nothing to commit, working directory clean
[root@git Dosier_Project]
5、继续模拟版本2、版本3
[root@git ~]
[root@git Dosier_Project]
[root@git Dosier_Project]
[root@git Dosier_Project]
[root@git Dosier_Project]
[root@git Dosier_Project]
[master beff2ea] modified dossier_1.sh,add dossier_2.sh
2 files changed, 2 insertions(+)
create mode 100644 dossier_2.sh
[root@git Dosier_Project]
nothing to commit, working directory clean
[root@git Dosier_Project]
[root@git Dosier_Project]
[root@git Dosier_Project]
[root@git Dosier_Project]
[master 72cd563] Add dossier_3.sh
1 file changed, 1 insertion(+)
create mode 100644 dossier_3.sh
[root@git Dosier_Project]
nothing to commit, working directory clean
[root@git Dosier_Project]
以上,我们就创建了3个版本,版本1为创建dossier_1.sh文件,版本2为修改dossier_1.sh文件,新加一个dossier_2.sh文件,模拟版本3为新加一个dossier_3.sh文件
6、git log 命令、git reflog 命令查看git仓库中有哪些版本 git log 和git reflog 命令都可以查看git仓库中有哪些版本,但两者的区别在于git log只能看得到当前的版本,而git reflog可以看得到所有的版本,也就是说当你回退版本之后,git reflog可以查看得到回退之前的版本,所有一般使用git reflog即可。
[root@git Dosier_Project]
commit 72cd563e2e0241670d7ebe8c541f28a12875e1e8
Author: lisi <456789123@qq.com>
Date: Mon Jan 31 18:05:42 2022 +0800
Add dossier_3.sh
commit beff2eaf816f345ba39779494752228a06ac1499
Author: lisi <456789123@qq.com>
Date: Mon Jan 31 18:01:03 2022 +0800
modified dossier_1.sh,add dossier_2.sh
commit ae2c1b8752efd01ef265e2227dd0b4ceb81310f4
Author: lisi <456789123@qq.com>
Date: Mon Jan 31 17:53:32 2022 +0800
Add dossier_1.sh
[root@git Dosier_Project]
72cd563 HEAD@{0}: commit: Add dossier_3.sh
beff2ea HEAD@{1}: commit: modified dossier_1.sh,add dossier_2.sh
ae2c1b8 HEAD@{2}: commit (initial): Add dossier_1.sh
[root@git Dosier_Project]
7、git reset --hard 版本号,实现版本自由回退
[root@git Dosier_Project]
72cd563 HEAD@{0}: commit: Add dossier_3.sh
beff2ea HEAD@{1}: commit: modified dossier_1.sh,add dossier_2.sh
ae2c1b8 HEAD@{2}: commit (initial): Add dossier_1.sh
[root@git Dosier_Project]
HEAD is now at beff2ea modified dossier_1.sh,add dossier_2.sh
[root@git Dosier_Project]
total 8
-rw-r--r-- 1 root root 35 Jan 31 17:56 dossier_1.sh
-rw-r--r-- 1 root root 15 Jan 31 17:56 dossier_2.sh
[root@git Dosier_Project]
I am dossier_1
I am good dossier_1
[root@git Dosier_Project]
HEAD is now at ae2c1b8 Add dossier_1.sh
[root@git Dosier_Project]
total 4
-rw-r--r-- 1 root root 15 Jan 31 18:38 dossier_1.sh
[root@git Dosier_Project]
I am dossier_1
[root@git Dosier_Project]
[root@git Dosier_Project]
ae2c1b8 HEAD@{0}: reset: moving to ae2c1b8
beff2ea HEAD@{1}: reset: moving to beff2ea
72cd563 HEAD@{2}: commit: Add dossier_3.sh
beff2ea HEAD@{3}: commit: modified dossier_1.sh,add dossier_2.sh
ae2c1b8 HEAD@{4}: commit (initial): Add dossier_1.sh
[root@git Dosier_Project]
HEAD is now at 72cd563 Add dossier_3.sh
[root@git Dosier_Project]
total 12
-rw-r--r-- 1 root root 35 Jan 31 18:44 dossier_1.sh
-rw-r--r-- 1 root root 15 Jan 31 18:44 dossier_2.sh
-rw-r--r-- 1 root root 15 Jan 31 18:44 dossier_3.sh
[root@git Dosier_Project]
8、git checkout – filename,撤销文件修改(文件未提交到暂存区) 开发工程师修改了某个文件,文件未提交到暂存区,需要撤销文件修改,可以通过删除文件内容达到恢复文件最开始状态,但如果是修改了很多,甚至连自己都不知道要删除哪些内容了,这时可以使用git checkout命令:
[root@git Dosier_Project]
[root@git Dosier_Project]
I am dossier_3
testesshfkshdsjdhjshka
[root@git Dosier_Project]
[root@git Dosier_Project]
I am dossier_3
[root@git Dosier_Project]
9、git reset HEAD file,撤销暂存区的文件
[root@git Dosier_Project]
[root@git Dosier_Project]
[root@git Dosier_Project]
[root@git Dosier_Project]
Unstaged changes after reset:
M dossier_3.sh
[root@git Dosier_Project]
10、删除一个文件并git rm提交到暂存区
[root@git Dosier_Project]
[root@git Dosier_Project]
no changes added to commit (use "git add" and/or "git commit -a")
[root@git Dosier_Project]
[root@git Dosier_Project]
git分支管理
后面我们会讲到GitHub远程仓库,开发团队成员都需要把代码提交到远程仓库,那为什么需要分支? 设想一下,如果只有一个master主分支,每个团队成员都去远程仓库master分支克隆一份代码下载到自己电脑进行代码编写,如果成员A尚未完成代码编写,只开发了部分功能,但怕自己电脑出现问题导致开发代码丢失,所以A需要提交代码到远程仓库,难不成A直接把未完成的代码直接提交到远程的master主分支上?然后来了个新人F,F去下载未完成的master分支代码? 其实不是的,企业中,远程仓库一般会创建多个分支,至少有一个dev分支,A可以先提交代码到dev分支,新人F是从master分支克隆代码,其他人也是从master克隆分支,然后大家都提交到dev分支,最后由仓库管理员leader决定是否合并dev分支代码到master分支,master分支的代码才是最后向用户提供的软件代码,所以必须保证master分支的代码是最正确的。
[root@git Dosier_Project]
* master
[root@git Dosier_Project]
[root@git Dosier_Project]
Switched to branch 'dev'
[root@git Dosier_Project]
* dev
master
[root@git Dosier_Project]
[root@git Dosier_Project]
[root@git Dosier_Project]
nothing added to commit but untracked files present (use "git add" to track)
[root@git Dosier_Project]
[root@git Dosier_Project]
[dev 00444bd] add dossier_4.sh on dev branch
1 file changed, 1 insertion(+)
create mode 100644 dossier_4.sh
[root@git Dosier_Project]
Switched to branch 'master'
[root@git Dosier_Project]
total 12
-rw-r--r-- 1 root root 35 Jan 31 20:08 dossier_1.sh
-rw-r--r-- 1 root root 15 Jan 31 18:44 dossier_2.sh
-rw-r--r-- 1 root root 15 Jan 31 19:58 dossier_3.sh
[root@git Dosier_Project]
Updating 72cd563..00444bd
Fast-forward
dossier_4.sh | 1 +
1 file changed, 1 insertion(+)
create mode 100644 dossier_4.sh
[root@git Dosier_Project]
total 16
-rw-r--r-- 1 root root 35 Jan 31 20:08 dossier_1.sh
-rw-r--r-- 1 root root 15 Jan 31 18:44 dossier_2.sh
-rw-r--r-- 1 root root 15 Jan 31 19:58 dossier_3.sh
-rw-r--r-- 1 root root 11 Jan 31 21:25 dossier_4.sh
[root@git Dosier_Project]
总结
1、git的安装
[root@git ~]
[root@git ~]
git version 1.8.3.1
2、创建项目目录并初始化
[root@git ~]
[root@git ~]
[root@git Dosier_Project]
[root@git Dosier_Project]
drwxr-xr-x 3 root root 78 Jan 31 18:04 .
dr-xr-x---. 5 root root 215 Jan 31 17:52 ..
drwxr-xr-x 8 root root 166 Jan 31 18:05 .git
[root@git Dosier_Project]
[root@git Dosier_Project]
[root@git Dosier_Project]
[root@git Dosier_Project]
[root@git Dosier_Project]
[root@git Dosier_Project]
[root@git Dosier_Project]
[root@git Dosier_Project]
[root@git Dosier_Project]
[root@git Dosier_Project]
[root@git Dosier_Project]
[root@git Dosier_Project]
[root@git Dosier_Project]
[root@git Dosier_Project]
[root@git Dosier_Project]
https://www.jianshu.com/p/e57a4a2cf077
|