Git本地库操作及分支处理,从视频和实战中总结
git命令行中选中即复制,粘贴为
shift+ins
,清屏为ctrl+l
,查看当前文件ll
,查看当前所有文件(包括隐藏文件):ll -lA
,查看文件内容为cat 文件名
,创建新文件为mkdir 文件名
。
# 本地库初始化
右键点击Git Bath Here
输入初始化命令:
git init
//执行结果:初始化了一个空的git仓库
$ git init
Initialized empty Git repository in D:/programming/git/test/.git/
//.git文件夹的内容
$ ll .git/
total 7
-rw-r--r-- 1 huawei 197121 23 Jul 16 10:24 HEAD
-rw-r--r-- 1 huawei 197121 130 Jul 16 10:24 config
-rw-r--r-- 1 huawei 197121 73 Jul 16 10:24 description
drwxr-xr-x 1 huawei 197121 0 Jul 16 10:24 hooks/
drwxr-xr-x 1 huawei 197121 0 Jul 16 10:24 info/
drwxr-xr-x 1 huawei 197121 0 Jul 16 10:24 objects/
drwxr-xr-x 1 huawei 197121 0 Jul 16 10:24 refs/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
注:
- 可以通过
mkdir 文件名
来创建新文件 .git
是隐藏文件,如果ls -lA
命令可以查看- 通过
ll
命令查看当前目录下的文件 - .git目录存放的是本地库相关的子目录和文件,不要删除,也不要修改
# 设置签名
- 形式:
- 用户名:tom
- Email:goodMorning@atguigu.com
- 作用:区分不同开发人员身份
- 命令:
项目级别/仓库级别:仅在当前本地库范围有效
git config user.name tom_pro git config user.email goodMorning_pro@atguigu.com //信息保存位置:./.git/config文件(可通过`cat 文件`来查看)
1
2
3系统用户级别:登录当前操作系统的用户范围
git config --global user.name tom git config --global user.email goodMorning@atguigu.com //信息保存位置:~/.gitconfig文件
1
2
3二者都没有是不允许的,后面执行git命令会报错,且重复设置可覆盖
- 查看签名:
项目级别:
ll .git #可看到.git目录中有config文件 cat .git/config #查看文件内容,设置了签名可看见[user]项
1
2系统级别:
cd ~ #回到系统目录 pwd #查看系统目录的路径 ll -lA #配置了系统签名可看见系统目录有.gitconfig文件 cat .gitconfig
1
2
3
4
注:这里设置的签名和登录代码托管中心的账号、密码没有任何关系
# 基本操作
- 新建一个文件
vim 文件名
1
- 随便输入文件内容
- 内容输完后,按Esc,在最下面输入:wq退出编辑界面
- 查看状态
- 查看工作区、暂存区状态
git status
//在没有添加和提交文件前:
$ git status
On branch master//在master分支上
No commits yet//本地库没有提交的东西
nothing to commit (create/copy files and use "git add" to track)//暂存区没有提交的东西
//在添加了文件,但没有git add提交前:
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)//文件没有被git追踪,希望执行git add
good.txt
nothing added to commit but untracked files present (use "git add" to track)
//提交到暂存区之后:
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)//撤销提交操作,只是撤销,不会删除在工作区的good.txt文件
new file: good.txt
//提交到本地库之后:
$ git status
On branch master
nothing to commit, working tree clean
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
- 添加操作
- 将工作区的“新建/修改”添加到暂存区
- 如果是修改文件,可以不再git add,直接git commit
- 添加到暂存区是可以撤回的,但提交到本地库就没有撤回操作了
//添加到暂存区
git add 文件名
//将所有文件添加到暂存区
git add .
git rm --cached 文件名
//从暂存区移除
1
2
3
4
5
6
7
2
3
4
5
6
7
- 提交操作
- 将暂存区的内容提交到本地库
- 如果提交暂存区的所有文件或者解决冲突时,commit后面不用加文件名
git commit 文件名
//回车后会出现vim界面,要求输入提交信息(就像代码注释一样)
//在最下面输入':set nu'可显示行号(此命令可以不用)
//按'i'进入编辑模式
//编辑后按Esc,在最下面输入:wq退出编辑界面
//执行结果:
$ git commit good.txt
warning: LF will be replaced by CRLF in good.txt.
[master (root-commit) f8cc15d] my first commit//将第一次提交作为根提交
1 file changed, 3 insertions(+)//一个文件修改,3行
create mode 100644 good.txt
git commit -m "提交信息" 文件名
//这样就不用进文本编辑器了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- 版本的前进和后退
操作实质就是移动HEAD指针,它指向当前版本。
查看版本的历史记录:
git log
git log --pretty=oneline
//当版本信息过多时,可以使用第二条命令,让每条信息只显示一行(空格向下翻页,b向上翻页,q退出)
git log --oneline//日志信息只显示一部分
git reflog//显示出HEAD指针要移动的次数
//执行结果
$ git log
commit f8cc15dbf75e66bf07e96bfe7d3675ca737b9dbd (HEAD -> master)//中间的数值是哈希值(索引值),右边的HEAD指针指向当前的版本,版本的前进后退就是通过改变HEAD指针的指向来实现的
Author: tom <goodMorning@qq.com>
Date: Fri Jul 16 11:28:31 2021 +0800
my first commit
$ git log --pretty=oneline
c5eeeac23ab7a74da4c5baa7da154254db8621a5 (HEAD -> master) add twice
ef3e37de49a24c21249ab60151f0f00716de3df1 third
e52284f6df167e21759573bd2e986c69c595118d second
f8cc15dbf75e66bf07e96bfe7d3675ca737b9dbd my first commit
$ git log --oneline
c5eeeac (HEAD -> master) add twice
ef3e37d third
e52284f second
f8cc15d my first commit
$ git reflog
c5eeeac (HEAD -> master) HEAD@{0}: commit: add twice
ef3e37d HEAD@{1}: commit: third
e52284f HEAD@{2}: commit: second
f8cc15d HEAD@{3}: commit (initial): my first commit//{}里面是HEAD指针要移动的步数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
操作方法:
- 基于索引值操作(不用考虑前进还是后退,只要选中你想要的版本就可以了)
git reset --hard hash值//该索引为想回退版本的哈希值
huawei@LAPTOP-E998T2VO MINGW64 /d/programming/git/test (master)
$ git reset --hard ef3e37d
HEAD is now at ef3e37d third
huawei@LAPTOP-E998T2VO MINGW64 /d/programming/git/test (master)
$ git reflog
ef3e37d (HEAD -> master) HEAD@{0}: reset: moving to ef3e37d//当前指针指向位置
//版本列表及指针位置
c5eeeac HEAD@{1}: commit: add twice
ef3e37d (HEAD -> master) HEAD@{2}: commit: third
e52284f HEAD@{3}: commit: second
f8cc15d HEAD@{4}: commit (initial): my first commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
- 使用^符号(只能后退)
git reset --hard HEAD^//n个^就退n步
1
- 使用~符号(只能后退)
git reset --hard HEAD~n//n表示后退n步
1
- reset命令的三个参数对比
- --soft
- 仅仅在本地库移动HEAD指针
- 相当于commit的撤销操作
- --mixed
- 在本地库移动HEAD指针
- 重置暂存区
- 相当于add的撤销操作
- --hard
- 在本地库移动HEAD指针
- 重置暂存区
- 重置工作区
- --soft
- 永久删除文件并找回
从本地库中删除文件:
rm aaa.txtgit add aaa.txtgit commit -m "delete aaa.txt" aaa.txt
//提交删除操作
1
2
2
找回文件:
- 只要提交到了本地库,都会留下记录,可以根据记录找回
- 通过版本前进后退操作根据hash值找回文件
- 比较文件
//修改文件后将工作区中文件和暂存区的文件进行比较
git diff apple.txt
//执行结果
$ git diff apple.txt
diff --git a/apple.txt b/apple.txt
index 4c479de..67a8a27 100644
--- a/apple.txt
+++ b/apple.txt
@@ -1 +1,2 @@
apple
+git diff
//+表示修改了的,-表示删除了的
//如果将暂存区的文件和本地库的文件比较就会显示区别
git diff HEAD apple.txt
//和某个历史版本比较
git diff HEAD^ apple.txt
//如果不加文件参数,则会列出当前工作区中所有文件的比较
git diff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 分支管理
分支:在版本控制过程中,使用多条线同时推进多个任务。

- 可以同时并行推进多个功能开发,提高开发效率
- 各个分支彼此独立,互不影响,失败的分支删除重新开始即可
# 分支操作
- 创建分支
git branch 分支名
1
- 查看所有分支
git branch -v
1
- 切换分支
git checkout 分支名
1
- 合并分支
- 切换到接受修改的分支上(被合并,增加新内容)
- 执行merge命令
git checkout mastergit merge hot-fix
//以上命令就是将hot-fix合并到master
1
2
2
- 解决冲突
如果两个分支修改的是同一个文件的同一位置就会产生冲突。
//产生冲突
$ git merge hot-fix
Auto-merging good.txt
CONFLICT (content): Merge conflict in good.txt
Automatic merge failed; fix conflicts and then commit the result.
$ cat good.txt
aaaaaaaa
bbbbbbbb
cccccccc
dddddddd
<<<<<<< HEAD //当前分支的内容
eeeeeeee edit by master
======= //分割冲突部分
eeeeeeee edit by hot-fix
>>>>>>> hot-fix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
冲突的解决:
- 编辑文件,删除特殊符号
- 把文件修改到满意的程度,保存退出
- git add [文件名]
- git commit -m "日志信息"(后面不能加文件名,否则会报错)