0基础上手Git

一、Git 的下载与安装 (基于 windows 系统)
1 . Git 的下载
2. 下载 64 位安装包
3. 安装 Git
二、Git 环境配置
1 . 设置用户信息与查看配置信息
2 . 初始化本地仓库
三、Git 基础
1 . 文件的两种状态
2. 文件加入暂存区与移除暂存区
3. 文件提交与删除
4. 文件添加至忽略列
5. 日志记录操作
6. 比较文件差异
7. 还原文件
四、Git 远程仓库
1.常见的 Git 托管平台
2. 注册码云账户、创建远程仓库
3. 远程仓库操作
4. 远程仓库的推送、抓取和拉取
5. 实际场景中的一套实际流程实战
6. 多人协作冲突问题
7. SSH 协议推送
五、Git 分支
1 . 使用分支的原因
2. 对分支的误解以及合并分支
3. 删除分支
4. 合并分支冲突
5. Git 标签与工作流
六、IDEA 集成 Git
1 . 在 IDEA 中配置 Git
2. 基于 IDEA 的 Git 基本操作
3. 基于 IDEA 的 Git 分支操作
4. 基于 IDEA 的 Git 冲突解决

一.Git的下载与安装(基于windows系统)

1.Git的下载
点击官方网址:Git官方网址
1).下载windows版本
在这里插入图片描述
2).下载64位安装包
在这里插入图片描述3).安装Git
点击Setup,然后傻瓜式安装就可以了
在这里插入图片描述

二.Git环境配置

1.设置用户信息与查看配置信息
1).设置用户信息:
当安装Git后首先要做的事情是设置用户名称和email地址。这是非常重要的,因为每次Git提交都会使用该用户信息。

git config --global user.name "你要设置的用户信息"
git config --global user.email "你要设置的邮箱"

2).查看配置信息:

git config --list

**注意:**通过上面的命令设置的信息会保存在~/.gitconfig文件中。
2.初始化本地仓库:
1).首先在电脑桌面创建一个git-test文件夹。
在这里插入图片描述
2).打开命令行终端:
在这里插入图片描述
在这里插入图片描述
ps:把鼠标放到文件里里面打开的命令行终端和把鼠标放在外面打开的命令行终端是不太一样的。因为一个是基于桌面,一个是基于文件的。
解决方案:可以用cd命令切换。
3).初始化本地仓库

git init

在这里插入图片描述
效果:生成了一个.git
在这里插入图片描述
里面内容:
在这里插入图片描述
ps:.git中的’.‘是代表隐藏的意思,在windows系统中以’.'开头是代表隐藏文件的意思。
结果:此时这个文件夹是一个工作目录!
如果是从同事那拷过来的就不用自已创建了!

三.Git基础

1.文件的两种状态
在这里插入图片描述
版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。

注意:
Git不关心文件两个版本之间的具体差别,而是关心文件的整体是否有改变,若文件被改变,在添加提交时就生成文件新版本的快照,而判断文件整体是否改变的方法就是用SHA-1算法计算文件的校验和。
● untracked未跟踪
未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
tracked已跟踪
被纳入版本控制
● Unmodified
文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified,如果使用git rm移出版本库, 则成为Untracked文件。
● Modified
文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过,返回unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改。
● Staged
暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存,文件状态为Modified。
注意:
这些文件的状态会随着我们执行Git的命令发生变化
变化图:
在这里插入图片描述
结合实际情况:

● 新建文件—>Untracked
● 使用add命令将新建的文件加入到暂存区—>Staged
● 使用commit命令将暂存区的文件提交到本地仓库—>Unmodified
● 如果对Unmodified状态的文件进行修改—> modified
● 如果对Unmodified状态的文件进行remove操作—>Untracked
查看文件状态命令

git status
参数:
-s: 简洁输出

实战;
在这里插入图片描述
此时我只是创建了一个文件,这个文件的状态是untracked
在这里插入图片描述
使用命令查看文件的状态。
在这里插入图片描述
添加到缓存区,查看状态然后修改文件。
在这里插入图片描述
在这里插入图片描述
修改后的状态
在这里插入图片描述
修改一下看一下git status -s命令
在这里插入图片描述
新建一个文件,会发现这个命令是非常方便的
在这里插入图片描述
2.文件加入暂存区与移除暂存区
文件加入暂存区:

git add 文件名

文件移除暂存区:

git reset 文件名

在这里插入图片描述
查询状态
在这里插入图片描述
用git add加入缓存区
在这里插入图片描述
用echo创建几个文件,然后用git add .把当前目录下的所有文件都加入到缓存区
在这里插入图片描述

可以看到都加入到暂存区了。
ps:在实际应用中,合理使用git add .可以提高开发效率。
在这里插入图片描述
用reset把文件移除暂存区。
3.文件提交与删除
1).文件提交
在这里插入图片描述
如果仅是通过git add命令把文件加到暂存区,还不算是完成整个流程。如果想让暂存区的内容永久保存下来,就要使用git commit命令。
在这里插入图片描述
文件提交命令:

git commit -m "提交信息"
参数:
● -m : 本次提交做了什么事,只要简单、清楚的文本说明即可,中英文都可以重点是说清楚,能让自己和别人很快明白就行。
如果不加m参数,会进入类似vim编辑。
ps:必须是暂存区文件才能提交

在这里插入图片描述
错误演示(没有加到暂存区直接提交)
在这里插入图片描述
正确演示:
在这里插入图片描述
不加-m的情况:
在这里插入图片描述
在这里插入图片描述
2).修改commit记录
身为程序员,难免会遇到一些不太顺心的客户或项目。心情不好的时候,在代码或Commit信息中“发泄”一下情绪也是很常见的,只是这要是让客户看见了总是不好解释。
要改动Commit记录有几种方式。
● (1)把.git目录整个删除(不建议)。
● (2)使用git rebase命令来改动历史记录。
● (3)先把 Commit用git reset命令删除,整理后再重新Commit。
● (4)使用–amend参数改动最后一次的Commit。
目前是用第四个来处理,后面可能会用到第二个和第三个。
使用–ament参数进行Commit
在这里插入图片描述3).删除文件

git rm 文件名

注意:
删除的文件只是删除工作目录的文件(也就是删除了文件夹中的文件),我们的版本库里面还是存在的。 删除文件会把这个文件直接放入暂存区。

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ ll
total 7
-rw-r--r-- 1 ZhaoYH 197121  2 May 20 10:33 a.info
-rw-r--r-- 1 ZhaoYH 197121  2 May 20 10:33 b.info
-rw-r--r-- 1 ZhaoYH 197121  2 May 20 10:34 c.info
-rw-r--r-- 1 ZhaoYH 197121 20 May 20 09:59 index.html
-rw-r--r-- 1 ZhaoYH 197121  8 May 20 09:59 login.html
-rw-r--r-- 1 ZhaoYH 197121  5 May 20 10:44 test.info
-rw-r--r-- 1 ZhaoYH 197121  7 May 20 10:47 test2.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git rm test2.info
rm 'test2.info'

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ ll
total 6
-rw-r--r-- 1 ZhaoYH 197121  2 May 20 10:33 a.info
-rw-r--r-- 1 ZhaoYH 197121  2 May 20 10:33 b.info
-rw-r--r-- 1 ZhaoYH 197121  2 May 20 10:34 c.info
-rw-r--r-- 1 ZhaoYH 197121 20 May 20 09:59 index.html
-rw-r--r-- 1 ZhaoYH 197121  8 May 20 09:59 login.html
-rw-r--r-- 1 ZhaoYH 197121  5 May 20 10:44 test.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        deleted:    test2.info

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


ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git commit -m "delete test2.info"
[master 22084a8] delete test2.info
 1 file changed, 1 deletion(-)
 delete mode 100644 test2.info

注意:右击删除和使用命令删除是有区别的
命令删除:暂存区里面的也会被清掉
手动删除:暂存区里面的文件没有被清除
命令删除直接git commit就可以了
手动删除需要先git add. 然后再commit
救已被删除的文件或者目录
“人有失手,马有失蹄”,人总会有不小心或状态不好的时候。不管是有意还是无心 在Git中如果不小心把文件或目录删除了,是可以挽救回来的,这也是使用版本控制系统最主要的原因之一。
这里先使用rm命令,故意把项目中所有的HTML文档删除:
在这里插入图片描述
可以看出当前1个文件都处于被删除(deleted)状态。
可以使用git checkout命令:

git checkout login.html

注意:
当使用git checkout命令时,Git 会切换到指定的分支,但如果后面接的是文件名或路径,Git则不会切换分支,而是把文件从.git目录中复制一份到当前的工作目录。更精准地说,这个命令会把暂存区中的内容或文件拿来覆盖工作目录中。
如果想把所有删除文件都挽救回来,可以使用以下命令:

git checkout .

小技巧:
这个技巧不仅可以将删除的文件挽救回来,当改动某个文件后反悔了,也可以用它把文件恢复到上一次Commit的状态。不是所有情况下都能恢复被删除的文件的。因为整个Git的记录都是放在根目录下的 .git目录中,如果这个目录被删除了,也就意味着历史记录也被删除了,那么删除的文件也就不能恢复了。

4.文件添加至忽略列
在这里插入图片描述
一般我们总会有些文件无需纳入Git的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。在这种情况下,我们可以在工作目录中创建一个名为 .gitignore的文件(文件名称固定),列出要忽略的文件模式。
比如:
在这里插入图片描述
这种是肯定不要的我们就可以添加到忽略列了。
1).忽略规则:

# / 表示 当前文件所在的目录


# 忽略public下的所有目录及文件
/public/*
#不忽略/public/assets,就是特例的意思,assets文件不忽略
!/public/assets


# 忽略具体的文件
index.class


# 忽略所有的class
*.class


# 忽略 a.class b.class
[ab].class

注意:
#匹配规则和linux文件匹配一样
#以斜杠“/”开头表示目录
#以星号“*”通配多个字符
#以问号“?”通配单个字符
#以方括号“[]”包含单个字符的匹配列表
#以叹号“!”表示不忽略(跟踪)匹配到的文件或目录
注意:因为.gitignore是需要以.开头的,所以我们不能用windows系统去创建,因为windows是不支持的,我们可以使用命令行终端去进行创建。


ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ rm -rf login.html

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git checkout login.html
Updated 1 path from the index

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ touch .gitignore

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ ll
total 6
-rw-r--r-- 1 ZhaoYH 197121  2 May 20 10:33 a.info
-rw-r--r-- 1 ZhaoYH 197121  2 May 20 10:33 b.info
-rw-r--r-- 1 ZhaoYH 197121  2 May 20 10:34 c.info
-rw-r--r-- 1 ZhaoYH 197121 20 May 20 09:59 index.html
-rw-r--r-- 1 ZhaoYH 197121  9 May 20 11:04 login.html
-rw-r--r-- 1 ZhaoYH 197121  5 May 20 10:44 test.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ ll -a
total 62
drwxr-xr-x 1 ZhaoYH 197121  0 May 20 11:16 ./
drwxr-xr-x 1 ZhaoYH 197121  0 May 20 09:19 ../
drwxr-xr-x 1 ZhaoYH 197121  0 May 20 11:04 .git/
-rw-r--r-- 1 ZhaoYH 197121  0 May 20 11:16 .gitignore
-rw-r--r-- 1 ZhaoYH 197121  2 May 20 10:33 a.info
-rw-r--r-- 1 ZhaoYH 197121  2 May 20 10:33 b.info
-rw-r--r-- 1 ZhaoYH 197121  2 May 20 10:34 c.info
-rw-r--r-- 1 ZhaoYH 197121 20 May 20 09:59 index.html
-rw-r--r-- 1 ZhaoYH 197121  9 May 20 11:04 login.html
-rw-r--r-- 1 ZhaoYH 197121  5 May 20 10:44 test.info

注意:查看隐藏文件的时候要加-a

实战:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ echo "test" >test.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ ll
total 7
-rw-r--r-- 1 ZhaoYH 197121 26 May 20 11:19 Helloworld.java
-rw-r--r-- 1 ZhaoYH 197121  2 May 20 10:33 a.info
-rw-r--r-- 1 ZhaoYH 197121  2 May 20 10:33 b.info
-rw-r--r-- 1 ZhaoYH 197121  2 May 20 10:34 c.info
-rw-r--r-- 1 ZhaoYH 197121 20 May 20 09:59 index.html
-rw-r--r-- 1 ZhaoYH 197121  9 May 20 11:04 login.html
-rw-r--r-- 1 ZhaoYH 197121  5 May 20 11:20 test.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git add .
warning: in the working copy of 'test.info', LF will be replaced by CRLF the next time Git touches it
warning: in the working copy of '.gitignore', LF will be replaced by CRLF the next time Git touches it
warning: in the working copy of 'a.info', LF will be replaced by CRLF the next time Git touches it

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git commit -m "test .gitignore"
[master 56b01d8] test .gitignore
 2 files changed, 2 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 a.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git status
On branch master
nothing to commit, working tree clean

5.日志记录操作
在这里插入图片描述
查看日志命令

git log
参数:
-- graph:查看分支合并图
-- oneline:把信息都压缩到一行里面

在这里插入图片描述
获取执行过的命令:

git reflog

在这里插入图片描述
6.比较文件差异
在这里插入图片描述

diff是指的是两个事物的不同。例如在Linux系统中,diff命令会逐行比较两个文本的差异然后显示出来。
对比文件差异命令

git diff [--cached]
注意:
---:标记原始文件
+++:标记新文件
@@:两个不同文件版本的上下文行号。
-: 原始文件删除改行
+:原始文件增加一行

在这里插入图片描述
新建一个文件夹diff-test进行操作

在这里插入代码片

在这里插入图片描述
这个是vim 的修改内容
注意:
【1】这个diff是比较工作区和暂存区的,如果你工作区间提交以后就和暂存区一样了
【2】这个diff --cached是比较暂存区和版本库的,如果你暂存区提交以后就和这个版本库一样了
实战代码:


ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test
$ git init
Initialized empty Git repository in C:/Users/ZhaoYH/Desktop/diff-test/.git/

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ ll
total 0

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ echo "hello java people" > a.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ ls
a.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git status
On branch master

No commits yet

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

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

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git add .
warning: in the working copy of 'a.info', LF will be replaced by CRLF the next time Git touches it

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git status
On branch master

No commits yet

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


ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ ls
a.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ vim a.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git status
On branch master

No commits yet

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

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:   a.info


ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git diff
warning: in the working copy of 'a.info', LF will be replaced by CRLF the next time Git touches it
diff --git a/a.info b/a.info
index 6c0ae12..53f4d32 100644
--- a/a.info
+++ b/a.info
@@ -1 +1,2 @@
 hello java people
+hello python people

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git add .
warning: in the working copy of 'a.info', LF will be replaced by CRLF the next time Git touches it

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git status
On branch master

No commits yet

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


ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git diff

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git diff --cached
diff --git a/a.info b/a.info
new file mode 100644
index 0000000..53f4d32
--- /dev/null
+++ b/a.info
@@ -0,0 +1,2 @@
+hello java people
+hello python people

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git commit -m "save file test diff"
[master (root-commit) d2fe698] save file test diff
 1 file changed, 2 insertions(+)
 create mode 100644 a.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ vim a.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git diff
warning: in the working copy of 'a.info', LF will be replaced by CRLF the next time Git touches it
diff --git a/a.info b/a.info
index 53f4d32..c388ab5 100644
--- a/a.info
+++ b/a.info
@@ -1,2 +1,3 @@
 hello java people
 hello python people
+hello c++ people

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git add.
git: 'add.' is not a git command. See 'git --help'.

The most similar command is
        add

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git add .
warning: in the working copy of 'a.info', LF will be replaced by CRLF the next time Git touches it

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   a.info


ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git diff -- cached

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git diff --cached
diff --git a/a.info b/a.info
index 53f4d32..c388ab5 100644
--- a/a.info
+++ b/a.info
@@ -1,2 +1,3 @@
 hello java people
 hello python people
+hello c++ people

7.还原文件
对于恢复修改的文件,就是将文件从仓库中拉到本地工作区,即 仓库区 ----> 暂存区 ----> 工作区。
对于修改的文件有三种情况:
● 只是修改了文件,没有任何 Git 操作
● 修改了文件,并提交到暂存区(即编辑之后,gitadd但没有 git commit -m …)
● 修改了文件,并提交到仓库区(即编辑之后,gitadd和gitadd和 git commit -m …)
情况I
只是修改了文件,没有任何 git 操作,直接一个命令就可回退

$ git checkout -- aaa.txt # aaa.txt为文件名

情况II
修改了文件,并提交到暂存区(即编辑之后,git add但没有gitadd但没有 git commit )

$ git log --oneline   # 可以省略
$ git reset HEAD   # 回退到当前版本
$ git checkout -- aaa.txt   # aaa.txt为文件名

情况III
修改了文件,并提交到仓库区(即编辑之后git add和gitadd和 git commit -m )

$ git log --oneline   # 可以省略
$ git reset HEAD^   # 回退到上一个版本
$ git checkout -- aaa.txt   # aaa.txt为文件名

实战:


ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ echo "hello checkout" > aaa.txt

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ cat aaa.txt
hello checkout

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git add .
warning: in the working copy of 'aaa.txt', LF will be replaced by CRLF the next time Git touches it

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git commit -m "hello checkout"
[master d4f540a] hello checkout
 2 files changed, 2 insertions(+)
 create mode 100644 aaa.txt

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ vim aaa.txt

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ cat aaa.txt
hello checkout 2

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git checkout -- aaa.txt

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ cat aaa.txt
hello checkout

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ vim aaa.txt

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git add aaa.txt

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git log --oneline
d4f540a (HEAD -> master) hello checkout
d2fe698 save file test diff

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git reset HEAD
Unstaged changes after reset:
M       aaa.txt

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (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:   aaa.txt

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

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git checkout -- aaa.txt

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ cat aaa.txt
hello checkout

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ vim aaa.txt

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ cat aaa.txt
hello checkout 2

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git add .

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git commit -m "test checkout"
[master 0dbbb2d] test checkout
 1 file changed, 1 insertion(+), 1 deletion(-)

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git log -- oneline

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git log --oneline
0dbbb2d (HEAD -> master) test checkout
d4f540a hello checkout
d2fe698 save file test diff

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git reset HEAD^
Unstaged changes after reset:
M       aaa.txt

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (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:   aaa.txt

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

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git checkout --a.txt
error: unknown option `a.txt'
usage: git checkout [<options>] <branch>
   or: git checkout [<options>] [<branch>] -- <file>...

    -b <branch>           create and checkout a new branch
    -B <branch>           create/reset and checkout a branch
    -l                    create reflog for new branch
    --[no-]guess          second guess 'git checkout <no-such-branch>' (default)
    --[no-]overlay        use overlay mode (default)
    -q, --[no-]quiet      suppress progress reporting
    --[no-]recurse-submodules[=<checkout>]
                          control recursive updating of submodules
    --[no-]progress       force progress reporting
    -m, --[no-]merge      perform a 3-way merge with the new branch
    --[no-]conflict <style>
                          conflict style (merge, diff3, or zdiff3)
    -d, --[no-]detach     detach HEAD at named commit
    -t, --[no-]track[=(direct|inherit)]
                          set branch tracking configuration
    -f, --[no-]force      force checkout (throw away local modifications)
    --[no-]orphan <new-branch>
                          new unborn branch
    --[no-]overwrite-ignore
                          update ignored files (default)
    --[no-]ignore-other-worktrees
                          do not check if another worktree is using this branch
    -2, --ours            checkout our version for unmerged files
    -3, --theirs          checkout their version for unmerged files
    -p, --[no-]patch      select hunks interactively
    --[no-]ignore-skip-worktree-bits
                          do not limit pathspecs to sparse entries only
    --[no-]pathspec-from-file <file>
                          read pathspec from file
    --[no-]pathspec-file-nul
                          with --pathspec-from-file, pathspec elements are separated with NUL character


ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git checkout -- a.txt
error: pathspec 'a.txt' did not match any file(s) known to git

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ git checkout -- aaa.txt

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/diff-test (master)
$ cat aaa.txt
hello checkout

ps:对aaa.txt文件的修改就是加了一个数字2
注意:
git reset 版本号 ---- 将暂缓区回退到指定版本,根据 $ git log --oneline 显示的版本号,可以回退到任何一个版本,也可通过 HEAD 来指定版本。
● HEAD 当前版本
● HEAD^ 上一个版本
● HEAD^^ 上上一个版本

四.Git远程仓库

1.常见的Git托管平台
前面我们已经知道了Git中存在两种类型的仓库,即本地仓库和远程仓库。

常见远程仓库托管平台
我们可以借助互联网上提供的一些代码托管服务来实现,其中比较常用的有GitHub、码云、GitLab等。
● GitHub (地址: github)是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯的版本库格式进行托管,故名GitHub。
● 码云(地址: 码云)是国内的一个代码托管平台,由于服务器在国内,所以相比于GitHub,码云速度会更快。
● GitLab (地址: gitlab))是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。
2.注册码云账户、创建远程仓库
由于码云是国内开发的,登录不需要魔法,并且由于服务器在国内,因此访问速度也是非常快的。
1).注册
在这里插入图片描述
2).登录码云
注册完成可以使用刚刚注册的邮箱进行登录(地址:码云登录)
3).创建Git远程仓库
在这里插入图片描述
3.远程仓库操作
在这里插入图片描述
1).添加远程仓库
添加一个新的远程Git仓库,同时指定一个可以引用的简写。

git remote add <shortname><url>
注意:
● shortname :远程的名字(可以随意取名)
● url : 远程仓库地址

2).查看远程仓库
如果想查看已经配置的远程仓库服务器,可以运行git remote命令。它会列出指定的每一个远程服务器的简写。如果已经克隆了远程仓库,那么至少应该能看到origin,这是Git克隆的仓库服务器的默认名。

git remote 

3).克隆远程仓库
如果你想获得一份已经存在了的Git仓库的拷贝,这时就要用到gitclone命令。Git克隆的是该Git仓库服务上的几乎所有数据(包括日志信息、历史记录等),而不仅仅是复制工作所需要的文件。当你执行git clone 命令的时候,默认配置下远程Git仓库中的每一个文件的每一个版本都将被拉取下来。

git clone 远程仓库地址url

4).移除无效的远程仓库
果因为一些原因想要移除一个远程仓库,可以使用git remote rm

git remote rm 远程仓库名字

注意:
此命令只是从本地移除远程仓库的记录,并不会真正影响到远程仓库。
4.远程仓库的推送、抓取和拉取
1).Git远程仓库_推送
当你想分享你的代码时,可以将其推送到远程仓库。

git push [remote-name][branch-name]

ps:哪一层有.git哪一层就是工作目录。
2).从远程仓库中抓取与拉取

git fetch

注意:
git fetch是从远程仓库获取最新版本到本地仓库,不会自动merge,想看见文件就需要手动进行合并文件 git merge origin/master 。

git pull

注意:
git pull是从远程仓库获取最新版本到本地仓库,会自动merge
5.实际场景中的一套实际流程实战

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ echo "hello pull2" > pull2.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git add .
warning: in the working copy of 'pull2.info', LF will be replaced by CRLF the next time Git touches it

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git commit -m "test pull2"
[master c1df8c1] test pull2
 1 file changed, 1 insertion(+)
 create mode 100644 pull2.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git remote
origin

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git push origin master

6.多人协作冲突问题
在这里插入图片描述
为什么会出现冲突问题

  1. 不同分支下的合并
  2. 同一个分支下的pull后者push(简单来说就是两个不同的用户操作了同一个文件)

下载远程仓库


ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-yunhan
$ git clone https://gitee.com/zhaoyunh/popular-tourism-network.git zyh
Cloning into 'zyh'...
remote: Enumerating objects: 23, done.
remote: Counting objects: 100% (23/23), done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 23 (delta 6), reused 0 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (23/23), done.
Resolving deltas: 100% (6/6), done.

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-yunhan
$ git clone https://gitee.com/zhaoyunh/popular-tourism-network.git zyh1
Cloning into 'zyh1'...
remote: Enumerating objects: 23, done.
remote: Counting objects: 100% (23/23), done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 23 (delta 6), reused 0 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (23/23), done.
Resolving deltas: 100% (6/6), done.


实战
ps:如果有vim都是默认zyh里面加了一个java people,zyh1里面加了一个python people
如果只有一个远程仓库是可以直接git push的

zyh这个用户

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-yunhan/zyh (master)
$ ll
total 6
-rw-r--r-- 1 ZhaoYH 197121  3 May 21 09:33 c.info
-rw-r--r-- 1 ZhaoYH 197121 21 May 21 09:33 index.html
-rw-r--r-- 1 ZhaoYH 197121  9 May 21 09:33 login.html
-rw-r--r-- 1 ZhaoYH 197121 12 May 21 09:33 pull.info
-rw-r--r-- 1 ZhaoYH 197121 13 May 21 09:33 pull2.info
-rw-r--r-- 1 ZhaoYH 197121  6 May 21 09:33 test.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-yunhan/zyh (master)
$ cat c.info
c

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-yunhan/zyh (master)
$ vim c.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-yunhan/zyh (master)
$ git add .

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-yunhan/zyh (master)
$ git commit -m "update a.info"
[master adbf71b] update a.info
 1 file changed, 1 insertion(+)

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-yunhan/zyh (master)
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 16 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 266 bytes | 266.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 4a46c4a4
To https://gitee.com/zhaoyunh/popular-tourism-network.git
   c1df8c1..adbf71b  master -> master

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-yunhan/zyh (master)
$ cat c.info
c
hello java people


zyh1这个用户

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-yunhan/zyh1 (master)
$ ll
total 6
-rw-r--r-- 1 ZhaoYH 197121  3 May 21 09:33 c.info
-rw-r--r-- 1 ZhaoYH 197121 21 May 21 09:33 index.html
-rw-r--r-- 1 ZhaoYH 197121  9 May 21 09:33 login.html
-rw-r--r-- 1 ZhaoYH 197121 12 May 21 09:33 pull.info
-rw-r--r-- 1 ZhaoYH 197121 13 May 21 09:33 pull2.info
-rw-r--r-- 1 ZhaoYH 197121  6 May 21 09:33 test.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-yunhan/zyh1 (master)
$ cat c.info
c

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-yunhan/zyh1 (master)
$ cat c.info
c

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-yunhan/zyh1 (master)
$ vim c.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-yunhan/zyh1 (master)
$ git add .

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-yunhan/zyh1 (master)
$ git commit -m "update a.info"
[master 3b48121] update a.info
 1 file changed, 1 insertion(+)

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-yunhan/zyh1 (master)
$ git push
To https://gitee.com/zhaoyunh/popular-tourism-network.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://gitee.com/zhaoyunh/popular-tourism-network.git'
hint: Updates were rejected because the remote contains work that you do not
hint: have locally. This is usually caused by another repository pushing to
hint: the same ref. If you want to integrate the remote changes, use
hint: 'git pull' before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-yunhan/zyh1 (master)
$ ^C

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-yunhan/zyh1 (master)
$ git pull
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 (from 0)
Unpacking objects: 100% (3/3), 246 bytes | 13.00 KiB/s, done.
From https://gitee.com/zhaoyunh/popular-tourism-network
   c1df8c1..adbf71b  master     -> origin/master
Auto-merging c.info
CONFLICT (content): Merge conflict in c.info
Automatic merge failed; fix conflicts and then commit the result.

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-yunhan/zyh1 (master|MERGING)
$ vim c.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-yunhan/zyh1 (master|MERGING)
$ git add .

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-yunhan/zyh1 (master|MERGING)
$ git commit -m "解决了c.info冲突问题"
[master a4f6624] 解决了c.info冲突问题

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-yunhan/zyh1 (master)
$ git push
Enumerating objects: 8, done.
Counting objects: 100% (8/8), done.
Delta compression using up to 16 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 468 bytes | 468.00 KiB/s, done.
Total 4 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 4a45f9a0
To https://gitee.com/zhaoyunh/popular-tourism-network.git
   adbf71b..a4f6624  master -> master

报错信息:

 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://gitee.com/zhaoyunh/popular-tourism-network.git'
hint: Updates were rejected because the remote contains work that you do not
hint: have locally. This is usually caused by another repository pushing to
hint: the same ref. If you want to integrate the remote changes, use
hint: 'git pull' before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

解决冲突
拉取最新的代码解决冲突
拉取最新的代码(在出现错误的用户进行拉取)

git pull

vim 发生冲突的文件

c
<<<<<<< HEAD
hello python people
=======
hello java people
>>>>>>> adbf71b3287da1f76ff05e04d2f1e0e24d08bafc

HEAD是当前
另外一个是远程仓库中的
你可以在这里进行修改了

一定要养成良好的习惯
在push之前,建议一定要先pull一下。

7.SSH协议推送
在这里插入图片描述
Git支持的传输协议
由于Git的远程仓库不在我们本地,当我们在使用远程仓库的时候(例如克隆,拉取,推送)就会涉及到数据的网络传输,Git支持多种数据传输协议,包括:
● 本地协议(Local)
● HTTPS协议
● SSH(Secure Shell)协议
● Git协议
注意:码云目前只支持HTTPS和SSH
什么是SSH协议
SSH为Secure Shell(安全外壳协议)的缩写,由IETF的网络小组(Network Working Group)所制定。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。
配置SSH协议
以使用Git提供的命令行工具Git Bash生成公钥和私钥,具体操作过程如下:
1).使用命令ssh-keygen -t rsa生成公钥和私钥

ssh-keygen -t rsa
记得输入完按三下回车

注意:
执行完成后在window本地用户.ssh目录(C:\Users\用户名.ssh)下生成如下名称的公钥和私钥。

2).复制公钥文件内容至服务器上
在这里插入图片描述

3).配置完成后就可以正常传输数据了
在这里插入图片描述
为什么不用输入密码了呢?

在这里插入图片描述
五.Git分支
1.使用分支的原因
几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。
在这里插入图片描述

查看分支
列出版本库中的分支名。

git branch
参数:
● -r : 列出所有远程分支
● -a :列出所有本地分支和远程分支

创建分支(注意这个是本地分支)

git branch 分支名字
参数:
● -m 修改分支名字

切换分支

git checkout 分支名

Git分支_推送至远程仓库分支

git push 远程仓库名字 分支名字

实战:


ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git branch
* master

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git branch -a
* master
  remotes/origin/master

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git branch cat

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git branch
  cat
* master

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git branch b1 -b
error: unknown switch `b'
usage: git branch [<options>] [-r | -a] [--merged] [--no-merged]
   or: git branch [<options>] [-f] [--recurse-submodules] <branch-name> [<start-point>]
   or: git branch [<options>] [-l] [<pattern>...]
   or: git branch [<options>] [-r] (-d | -D) <branch-name>...
   or: git branch [<options>] (-m | -M) [<old-branch>] <new-branch>
   or: git branch [<options>] (-c | -C) [<old-branch>] <new-branch>
   or: git branch [<options>] [-r | -a] [--points-at]
   or: git branch [<options>] [-r | -a] [--format]

Generic options
    -v, --[no-]verbose    show hash and subject, give twice for upstream branch
    -q, --[no-]quiet      suppress informational messages
    -t, --[no-]track[=(direct|inherit)]
                          set branch tracking configuration
    -u, --[no-]set-upstream-to <upstream>
                          change the upstream info
    --[no-]unset-upstream unset the upstream info
    --[no-]color[=<when>] use colored output
    -r, --remotes         act on remote-tracking branches
    --contains <commit>   print only branches that contain the commit
    --no-contains <commit>
                          print only branches that don't contain the commit
    --[no-]abbrev[=<n>]   use <n> digits to display object names

Specific git-branch actions:
    -a, --all             list both remote-tracking and local branches
    -d, --[no-]delete     delete fully merged branch
    -D                    delete branch (even if not merged)
    -m, --[no-]move       move/rename a branch and its reflog
    -M                    move/rename a branch, even if target exists
    --[no-]omit-empty     do not output a newline after empty formatted refs
    -c, --[no-]copy       copy a branch and its reflog
    -C                    copy a branch, even if target exists
    -l, --[no-]list       list branch names
    --[no-]show-current   show current branch name
    --[no-]create-reflog  create the branch's reflog
    --[no-]edit-description
                          edit the description for the branch
    -f, --[no-]force      force creation, move/rename, deletion
    --merged <commit>     print only branches that are merged
    --no-merged <commit>  print only branches that are not merged
    --[no-]column[=<style>]
                          list branches in columns
    --[no-]sort <key>     field name to sort on
    --[no-]points-at <object>
                          print only branches of the object
    -i, --[no-]ignore-case
                          sorting and filtering are case insensitive
    --[no-]recurse-submodules
                          recurse through submodules
    --[no-]format <format>
                          format to use for the output


ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git branch -m cat b1

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git branch\
>
  b1
* master

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git branch -m b1 cat

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git checkout cat
Switched to branch 'cat'

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (cat)
$ echo "hello branchh " > branch.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (cat)
$ ll
total 8
-rw-r--r-- 1 ZhaoYH 197121 26 May 20 11:19 Helloworld.java
-rw-r--r-- 1 ZhaoYH 197121 15 May 21 13:51 branch.info
-rw-r--r-- 1 ZhaoYH 197121  2 May 20 10:34 c.info
-rw-r--r-- 1 ZhaoYH 197121 20 May 20 09:59 index.html
-rw-r--r-- 1 ZhaoYH 197121  9 May 20 11:04 login.html
-rw-r--r-- 1 ZhaoYH 197121 11 May 21 09:19 pull.info
-rw-r--r-- 1 ZhaoYH 197121 12 May 21 09:25 pull2.info
-rw-r--r-- 1 ZhaoYH 197121  5 May 20 11:20 test.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (cat)
$ git add .
warning: in the working copy of 'branch.info', LF will be replaced by CRLF the next time Git touches it

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (cat)
$ git commit -m "creare branch.info"
[cat e0db3ce] creare branch.info
 1 file changed, 1 insertion(+)
 create mode 100644 branch.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (cat)
$ git branch
* cat
  master

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (cat)
$ git checkedout master
git: 'checkedout' is not a git command. See 'git --help'.

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (cat)
$ git checkout master
Switched to branch 'master'

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git checkout cat
Switched to branch 'cat'

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (cat)
$ git push origin cat
Enumerating objects: 26, done.
Counting objects: 100% (26/26), done.
Delta compression using up to 16 threads
Compressing objects: 100% (15/15), done.
Writing objects: 100% (26/26), 1.79 KiB | 183.00 KiB/s, done.
Total 26 (delta 7), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 6340459d
remote: Create a pull request for 'cat' on Gitee by visiting:
remote: https://gitee.com/zhaoyunh/popular-tourism-network/pull/new/zhaoyunh:cat...zhaoyunh:master
To https://gitee.com/zhaoyunh/popular-tourism-network.git
 * [new branch]      cat -> cat

一个小知识点:
不同分支可能文件不同,如果一个分支有一个没有,你恰好打开的是没有的那就是看不到的!
2.对分支的误解以及合并分支
对分支的误解
虽然介绍了如何使用分支,但我相信有些小伙伴对分支还是有些误解的。
在这里插入图片描述

还是这个样子
在这里插入图片描述

分支是什么
有人可能认为,所谓的“开分支”,就是把文件先复制到另外的目录,然后进行改动,之后再合并,把文件与原本的文件比对之后放回原来的目录……其实,Git不是这样做的。
分支像贴纸一样
可以把分支想象成一张贴纸,贴在某一个Commit上面。
在这里插入图片描述

当做了一次新的Commit之后,这个新的Commit会指向它的前一个Commit。
在这里插入图片描述而接下来“当前的分支”,也就是HEAD所指的这个分支,会贴到刚刚做的那个Commit 上,同时HEAD也会跟着前进

在这里插入图片描述
一个分支不够,就来两个
如果一个分支不够说明,那就来两个。通过git branch cat命令创建一个新的分支。它就像一张贴纸,与master贴在同一个地方。
在这里插入图片描述
接下来执行git checkout cat命令,切换到cat分支。此时, HEAD转而指向cat分支,表示它是“当前的分支”。
在这里插入图片描述

结论:
Git中的分支并不是通过复制目录或文件来进行改动形成的,它就是一个指标、一张贴纸,贴在某个Commit 上而已。
合并分支

git merge b1

切换分支Git干了什么
主要做2件事
(1). 更新暂存区和工作目录
(2). 变更HEAD的位置
合并过的分支要保留吗
合并后,原本没有的内容都有了,而分支本身又像一张贴纸一样“地位低微”,那么它也就没有利用价值了。所以,合并过的分支想删就删吧。

3.删除分支
删除本地仓库分支

git branch -d 分支名
参数:
● -d 删除本地分支
注意:
如果要删除的分支中进行了一些开发动作,此时执行上面的删除命
令并不会删除分支,如果坚持要删除此分支,
可以将命令中的-d参数改为-D 。
简单来说就是要删除的删除有没有合并的内容,
-d就不能删除要用-D

不小心把还没合并的分支删除了,救的回来吗?
合并过的分支想留就留、想删就删,Git的分支并不是复制文件到某个目录,所以不会因为删掉分支文件就不见了。
注意:
但如果删除的是还未合并的分支就不一样了。
cat分支是从master分支出去的,当前领先master分支两次 Commit,而且还没有合并过。这时如果试着删掉cat分支,它会提醒:“这个分支还没全部合并哦”。

$ git branch -d cat
error: The branch 'cat' is not fully merged.
If you are sure you want to delete it, run 'git branch -D cat'.

虽然Git这么贴心的提醒了,但这里仍然把它删除了

git branch -D cat
Deleted branch cat(was b1729234)

上面不是已经删除cat分支了吗,怎么还在?这里再次跟大家说明一下分支的概念:分支只是一个指向某个Commit的指标,删除这个指标并不会使那些Commit消失。

git branch new_cat b2323b

注意:
这个命令"请帮我创建一个叫做new_cat的分支,让它指向17b23n3这个Commit",也就是在拿一张贴纸贴回去。

删除远程仓库分支

git push origin -d 分支名称

实战:
工作场景如下
为实现某个新的需求,创建一个分支(dev)。在这个分支上开展工作。正在此时,你突然接到一个电话说有个很严重的问题需要紧急修补。
你将按照如下方式来处理

  1. 切换到你的线上分支(master)。
  2. 为这个紧急任务新建一个分支(fix),并在其中修复它。
  3. 在测试通过之后,切换回线上分支(master)。
  4. 然后合并这个修补分支(fix),最后将改动推送到线上分支(master)。
  5. 切换回你最初工作的分支上(dev),继续工作。

4.合并分支冲突
有时候合并操作不会如此顺利。如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git就没办法合并它们,同时会提示文件冲突。
冲突以及解决的实战


ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git branch
* master

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ cat c.info
c
hello java people
hello python people

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git branch cat

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git checkout cat
Switched to branch 'cat'

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (cat)
$ cat c.info
c
hello java people
hello python people

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (cat)
$ vim c.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (cat)
$ git commit -a -m "update a.info"
[cat 4708a02] update a.info
 1 file changed, 1 insertion(+)

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (cat)
$ git checkout master
Switched to branch 'master'

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ vim a.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ vim c.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git add .

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git commit -m "update a.info in master"
[master 2e65bbc] update a.info in master
 2 files changed, 1 insertion(+)
 create mode 100644 a.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git merge cat
Auto-merging c.info
CONFLICT (content): Merge conflict in c.info
Automatic merge failed; fix conflicts and then commit the result.

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master|MERGING)
$ cat a.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master|MERGING)
$ cat c.info
c
hello java people
hello python people
<<<<<<< HEAD
hello shell people
=======
hello go people
>>>>>>> cat

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master|MERGING)
$ vim c.inf

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master|MERGING)
$ vim c.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master|MERGING)
$ git add .

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master|MERGING)
$ git commit -m "update c.info"
[master b18edd5] update c.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/git-test (master)
$ git merge cat
Already up to date.


5.Git标签与工作流
1.Git标签的概念
标签是什么?
Git可以给历史中的某一个提交打上标签,以示重要。比较有代表性的是人们会使用这个功能来标记发布结点(v1.0、v1.2等)。标签指的是某个分支某个特定时间点的状态。通过标签,可以很方便的切换到标记时的状态。
在这里插入图片描述
什么时候用标签?
通常开发软件时会完成特定的“里程碑”,如软件版号1.0.0或beta-release之类的,这时就很适合使用标签做标记。
标签和分支有什么区别?
签与分支的区别是,分支会随着Commit而移动,但标签不会。之前介绍过当Git往前推,进一个Commit时,它所在的分支会跟着向前移动。而标签一旦贴上去不管Commit怎么前进,标签都会留在原来贴的那个位置上。因此,分支可以看成是“会移动的标签”。
注意:
这两者在被删除的时候,都不会影响到被指到的那个对象。
2.标签的基本操作
列出已有的标签

git tag

创建标签

git tag 标签名字

查看标签信息

git show 标签名字

标签推送远程仓库

git push [remote][tag]

3.标签检出与删除标签
检出标签
新建一个分支,指向某个tag

git checkout -b [branch] [tag]

删除本地标签

git tag -d [tag]

删除远程标签

$ git push origin :refs/tags/标签名字
注意:
:refs/tags/是固定写法。

4.工作流GitFlow是什么?
Git Flow是什么?
在使用Git的过程中如果没有清晰流程和规划,否则,每个人都提交一堆杂乱无章的commit,项目很快就会变得难以协调和维护。GitFlow工作流通过为功能开发、发布准备和维护分配独立的分支,让发布迭代过程更流畅。严格的分支模型也为大型项目提供了一些非常必要的结构。
Git Flow的常用分支
在这里插入图片描述
解释:
● master 主干分支,开发完成的上线的项目版本
● hotixes 热部署分支,进行主干分支的补丁操作
● release 预部署分支,测试工程师的调用的分支
● develop 开发分支,开发源代码分支
● feature 功能分支,你们调用分支
Master/Develop分支
所有在Master分支上的Commit应该打上Tag,一般情况下Master不存在Commit,Devlop分支基于Master分支创建
在这里插入图片描述Feature分支
Feature分支做完后,必须合并回Develop分支, 合并完分支后一般会删点这个Feature分支,但是我们也可以保留。
在这里插入图片描述Release分支
Release分支基于Develop分支创建,打完Release分之后,我们可以在这个Release分支上测试,修改Bug等。同时,其它开发人员可以基于开发新的Feature 发布Release分支时,合并Release到Master和Develop, 同时在Master分支上打个Tag记住Release版本号,然后可以删除Release分支了。
注意:
一旦打了Release分支之后不要从Develop分支上合并新的改动到Release分支。
Hotfix分支
hotfix分支基于Master分支创建,开发完后需要合并回Master和Develop分支,同时在Master上打一个tag。
在这里插入图片描述
5.GitFlow工作流实战
注意:
Develop分支依赖于Master分支
Feature分支依赖于Master分支


ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (master)
$ echo "架构师创建初始项目结构" >jiagou.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (master)
$ git add .
warning: in the working copy of 'jiagou.info', LF will be replaced by CRLFext time Git touches it

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (master)
$ git commit -m "架构师初始项目"
[master 0769435] 架构师初始项目
 1 file changed, 1 insertion(+)
 create mode 100644 jiagou.info

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (master)
$ git push
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 16 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 369 bytes | 369.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 24482699
To gitee.com:zhaoyunh/git-flow.git
   2994e8b..0769435  master -> master

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (master)
$ git branch devolop

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (master)
$ git remote
origin

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (master)
$ git push -u origin devlop
error: src refspec devlop does not match any
error: failed to push some refs to 'gitee.com:zhaoyunh/git-flow.git'

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (master)
$ git push -u origin devolop
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 0642c588
remote: Create a pull request for 'devolop' on Gitee by visiting:
remote: https://gitee.com/zhaoyunh/git-flow/pull/new/zhaoyunh:devolop...zh:master
To gitee.com:zhaoyunh/git-flow.git
 * [new branch]      devolop -> devolop
branch 'devolop' set up to track 'origin/devolop'.

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (master)
$ git checkout devolop
Switched to branch 'devolop'
Your branch is up to date with 'origin/devolop'.

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (devolop)
$ git branch fetture_zyh

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (devolop)
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (master)
$ git checkout -b fetture_wu develop
fatal: 'develop' is not a commit and a branch 'fetture_wu' cannot be creatm it

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (master)
$ git checkout -b fetture_wu devoelop
fatal: 'devoelop' is not a commit and a branch 'fetture_wu' cannot be creaom it

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (master)
$ git checkout -b fetture_wu devolop
Switched to a new branch 'fetture_wu'

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (fetture_wu
$ git checkout -b fetture_zhangsann devolop
Switched to a new branch 'fetture_zhangsann'

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (fetture_zhn)
$ git push -u origin fetture_zhangsann
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag b14497bd
remote: Create a pull request for 'fetture_zhangsann' on Gitee by visiting
remote: https://gitee.com/zhaoyunh/git-flow/pull/new/zhaoyunh:fetture_zhan..zhaoyunh:master
To gitee.com:zhaoyunh/git-flow.git
 * [new branch]      fetture_zhangsann -> fetture_zhangsann
branch 'fetture_zhangsann' set up to track 'origin/fetture_zhangsann'.

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (fetture_zhn)
$ git push -u origin fetture_lisi
error: src refspec fetture_lisi does not match any
error: failed to push some refs to 'gitee.com:zhaoyunh/git-flow.git'

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (fetture_zhn)
$ git push -u origin fetture_wu
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 7e4c97b5
remote: Create a pull request for 'fetture_wu' on Gitee by visiting:
remote: https://gitee.com/zhaoyunh/git-flow/pull/new/zhaoyunh:fetture_wu..unh:master
To gitee.com:zhaoyunh/git-flow.git
 * [new branch]      fetture_wu -> fetture_wu
branch 'fetture_wu' set up to track 'origin/fetture_wu'.

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (fetture_zhn)
$ echo "张三用户管理模块" > user.java

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (fetture_zhn)
$ git add user.java
warning: in the working copy of 'user.java', LF will be replaced by CRLF tt time Git touches it

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (fetture_zhn)
$ git commit -m "用户管理完成"
[fetture_zhangsann 33f7167] 用户管理完成
 1 file changed, 1 insertion(+)
 create mode 100644 user.java

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (fetture_zhn)
$ git push origin fetture_zhangsann
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 16 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 318 bytes | 318.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 144525bc
To gitee.com:zhaoyunh/git-flow.git
   0769435..33f7167  fetture_zhangsann -> fetture_zhangsann

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (fetture_zhn)
$ git checkout fetture_wu
Switched to branch 'fetture_wu'
Your branch is up to date with 'origin/fetture_wu'.

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (fetture_wu
$ echo "王五开发了登录模块" > login.java

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (fetture_wu
$ git add login.java
warning: in the working copy of 'login.java', LF will be replaced by CRLF xt time Git touches it

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (fetture_wu
$ git commit -m "登录模块"
[fetture_wu f583c7f] 登录模块
 1 file changed, 1 insertion(+)
 create mode 100644 login.java

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (fetture_wu
$ git push origin fetture_wu
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 16 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 317 bytes | 317.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 96463584
To gitee.com:zhaoyunh/git-flow.git
   0769435..f583c7f  fetture_wu -> fetture_wu

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (fetture_wu
$ git checkout devolop
Switched to branch 'devolop'
Your branch is up to date with 'origin/devolop'.

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (devolop)
$ git pull
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
Unpacking objects: 100% (3/3), 1.95 KiB | 142.00 KiB/s, done.
From gitee.com:zhaoyunh/git-flow
   0769435..260ea58  devolop    -> origin/devolop
Updating 0769435..260ea58
Fast-forward
 login.java | 1 +
 user.java  | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 login.java
 create mode 100644 user.java

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (devolop)
$ ll
total 11
-rw-r--r-- 1 ZhaoYH 197121  987 May 22 15:35 README.en.md
-rw-r--r-- 1 ZhaoYH 197121 1351 May 22 15:35 README.md
-rw-r--r-- 1 ZhaoYH 197121   34 May 22 15:36 jiagou.info
-rw-r--r-- 1 ZhaoYH 197121   29 May 22 15:52 login.java
-rw-r--r-- 1 ZhaoYH 197121   26 May 22 15:52 user.java

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (devolop)
$ git checkout -b release-0.1.0 devolop
Switched to a new branch 'release-0.1.0'

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (release-0.1.0)
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (master)
$ git merge release-0.1.0
Updating 0769435..260ea58
Fast-forward
 login.java | 1 +
 user.java  | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 login.java
 create mode 100644 user.java

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (master)
$ git push
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag b3460fa1
To gitee.com:zhaoyunh/git-flow.git
   0769435..260ea58  master -> master

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (master)
$ git tag v0.1.0

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (master)
$ git push origin v0.1.0
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 0d4eaebb
To gitee.com:zhaoyunh/git-flow.git
 * [new tag]         v0.1.0 -> v0.1.0

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (master)
$ git checkout -b hotfix-0.1.1 master
Switched to a new branch 'hotfix-0.1.1'

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (hotfix-0.1.1)
$ vim user.java

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (hotfix-0.1.1)
$ git add .

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (hotfix-0.1.1)
$ git commit -m "修复了一个bug"
[hotfix-0.1.1 002b958] 修复了一个bug
 1 file changed, 1 insertion(+), 1 deletion(-)

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (hotfix-0.1.1)
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (master)
$ git merge hotfix-0.1.1
Updating 260ea58..002b958
Fast-forward
 user.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (master)
$ ll
total 11
-rw-r--r-- 1 ZhaoYH 197121  987 May 22 15:35 README.en.md
-rw-r--r-- 1 ZhaoYH 197121 1351 May 22 15:35 README.md
-rw-r--r-- 1 ZhaoYH 197121   34 May 22 15:36 jiagou.info
-rw-r--r-- 1 ZhaoYH 197121   29 May 22 15:54 login.java
-rw-r--r-- 1 ZhaoYH 197121   32 May 22 15:57 user.java

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (master)
$ cat user.java
张三用户管理模块完成

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (master)
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 16 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 307 bytes | 307.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 85427ea0
To gitee.com:zhaoyunh/git-flow.git
   260ea58..002b958  master -> master

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (master)
$ git tag v0.1.1

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (master)
$ git push
Everything up-to-date

ZhaoYH@DESKTOP-HAEUI7A MINGW64 ~/Desktop/gitflow-test/git-flow (master)
$ git push origin v0.1.1
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 84460ca2
To gitee.com:zhaoyunh/git-flow.git
 * [new tag]         v0.1.1 -> v0.1.1

六.IDEA集成Git
1.在IDEA中配置Git
安装好IntelliJ IDEA后,如果Git安装在默认路径下,那么idea会自动找到git的位置,如果更改了Git的安装位置则需要手动配置下Git的路径。 选择File→Settings打开设置窗口,找到Version Control下的git选项:
在这里插入图片描述

配置git

image-20211203155555181
在IDEA中创建工程并将工程添加至Git
新建项目
创建maven项目
在这里插入图片描述
简单来说:就是配置git,并且建立工作目录和本地仓库的联系。
2.基于IDEA的Git基本操作
忽略列文件
不安装插件无法创建忽视文件。
安装ignore插件并重启
在这里插入图片描述
下载好插件后就可以创建忽略文件了
在这里插入图片描述
1.提交流程:
(1).将文件加入暂存区
右键文件夹、点击add
(2).提交文件
右键文件夹、点击commit,写提交信息,然后提交就可以了
(3).推送至远程仓
在这里插入图片描述
(4)填写远程仓库url地址

在这里插入图片描述

点push,提交到远程仓库

2.从远程仓库克隆
在这里插入图片描述
在这里插入图片描述
3.从远程仓库拉取
右键点击文件,点击pull
在这里插入图片描述
4.版本对比
右键点击
在这里插入图片描述

3.基于IDEA的Git分支操作

(1).创建分支
在这里插入图片描述
(2).新建分支
在这里插入图片描述
(3).切换分支
在这里插入图片描述
(4).合并分支
在这里插入图片描述
4.基于IDEA的Git冲突解决
在这里插入图片描述
手动解决冲突
在这里插入图片描述
手动修改最终版本
最左是我自已的,第二个是同事的,第三个是远程仓库的。
最后提交代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值