# Git-安装及使用

Windows Git安装及使用 目录.png

# 1、git 安装、升级、简单测试

git 安装: 描述:windows 下载地址:windows git 默认会根据你的电脑下载适合版本类型 流程:双击下载的:Git-2.23.0-64-bit.exe --> 一直点击 Next 就可好(可以更改一下 git 安装路径).

# 1.1 git 升级:

描述:git 已经安装,想升级到最新版本 命令:尝试这两个命令 git update 和 git update-git-for-windows

#查看当前git版本
$ git version
git version 2.20.1.windows.1

#升级git到最新本版 再输入 "y"
$ git update
#升级git到最新本版 再输入 "y"
$ git update-git-for-windows

#查看升级后的git版本
$ git version
git version 2.24.0.windows.1

1
2
3
4
5
6
7
8
9
10
11
12
13

下载的新版本 git 的安装路径,默认是旧版本的安装地址

# 1.2 配置 git 的户信息:

命令:

#右击鼠标-->Git Bash Here 输入命令
#配置git用户名:随便起,最好好写成自己的拼音名字,这样提交代码到远程仓库,别人知道是你提交的
$ git config --global user.name "ZhengJa"
#配置git邮箱:邮箱格式要对,不要求邮箱是真的
$ git config --global user.email "953649948@qq.com"

1
2
3
4
5
6

命令演示:

Administrator@ZhengJiaAo MINGW64 ~/Desktop
#git配置用户名
$ git config --global user.name "ZhengJa"

Administrator@ZhengJiaAo MINGW64 ~/Desktop
#查询配置的用户名
$ git config user.name
ZhengJa

Administrator@ZhengJiaAo MINGW64 ~/Desktop
#git配置邮箱
$ git config --global user.email "953649948@qq.com"

Administrator@ZhengJiaAo MINGW64 ~/Desktop
#查询配置的邮箱
$ git config user.email
953649948@qq.com
Administrator@ZhengJiaAo MINGW64 ~/Desktop
#查询git的所有配置信息
$ git config --list
core.symlinks=false
core.autocrlf=true
core.fscache=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
help.format=html
rebase.autosquash=true
http.sslcainfo=D:/Git/mingw64/ssl/certs/ca-bundle.crt
http.sslbackend=openssl
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
credential.helper=manager
user.name=ZhengJa
user.email=953649948@qq.com
ssh.variant=ssh

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
32
33
34
35
36
37
38
39
40
41

git 安装及配置已经完成! (可选)git 客户端安装:sourcetree 官网下载 点击-->Download for Windows

# 1.3 git 本地测试:

创建一个 demo 文件夹,作为演示的本地仓库。此 git 工作流并没有与远程仓库做关联! 流程:创建文件 test.txt-->添加至暂存区-->将暂存区内容 commit 到本地仓库

命令:

#初始化本版库
git init

#添加文件到版本库,添加某个文件 git add test.txt  添加所有 git add .
git add
git commit -m "提交信息"

#查看仓库状态
git status

1
2
3
4
5
6
7
8
9
10

命令演示:

Administrator@ZhengJiaAo MINGW64 /j/testfile
#进入一个干净的文件夹-->testfile
$ ls

Administrator@ZhengJiaAo MINGW64 /j/testfile
#创建一个文件夹
$ mkdir demo

Administrator@ZhengJiaAo MINGW64 /j/testfile
#进入刚刚创建的文件夹
$ cd demo

Administrator@ZhengJiaAo MINGW64 /j/testfile/demo
#查看,文件夹中没有任何内容
$ ll
total 0

Administrator@ZhengJiaAo MINGW64 /j/testfile/demo
#初始化git
$ git init
Initialized empty Git repository in J:/testfile/demo/.git/

Administrator@ZhengJiaAo MINGW64 /j/testfile/demo (master)
#查看 可以看出生成了一个 .git文件夹,说明初始化git仓库成功
$ ls -a
./  ../  .git/

Administrator@ZhengJiaAo MINGW64 /j/testfile/demo (master)
#将"git repo" >> 追加进test.txt文件
$ echo "git repo" >> test.txt

Administrator@ZhengJiaAo MINGW64 /j/testfile/demo (master)
#查看test.txt文件内容
$ cat test.txt
git repo

Administrator@ZhengJiaAo MINGW64 /j/testfile/demo (master)
#git 将test文件添加到暂存区
$ git add test.txt
warning: LF will be replaced by CRLF in test.txt.
The file will have its original line endings in your working directory

Administrator@ZhengJiaAo MINGW64 /j/testfile/demo (master)
#git commit 暂存区文件提交到本地本库
$ git commit -m "repo first commit"
[master (root-commit) 3337810] repo first commit
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt

Administrator@ZhengJiaAo MINGW64 /j/testfile/demo (master)
#查看状态,说明现在都已提交到本地仓库,暂存区是干净的
$ 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# 1.4 解决 git bash 终端显示中文乱码

在 git bash 的界面中右击空白处,弹出菜单,选择选项->文本->本地 Locale,设置为 zh_CN,而旁边的字符集选框选为 UTF-8。

英文显示则是: Options->Text->Locale 改为 zh_CN,Character set 改为 UTF-8

# 2、git 工作流

工作流图: 工作流图.png

创建一个 demo2 文件夹,作为演示的本地仓库。此 git 工作流并没有与远程仓库做关联!

# 前提:查看 commit 日志:
git log --oneline    	 //查看commit提交列表:commit_Id
git log   //commit详细信息

1
2
3
# 2.1 文件 commit 本地仓库

流程 1:创建一个文件 demo2_test.txt-->添加文件到暂存区-->将暂存区内容保存到本地仓库

命令:

#初始化git版本库
git init

#将文件添加到暂存区
git add

#将暂存区的文件提交到本地仓库
git commit -m "提交描述信息"

1
2
3
4
5
6
7
8
9

命令演示:

Administrator@ZhengJiaAo MINGW64 /j/testfile
#进入一个干净的文件夹-->testfile
$ ls
demo/

#创建一个文件夹demo2
$ mkdir demo2

#进入刚刚创建的文件夹
$ cd demo2

#查看,文件夹中没有任何内容
Administrator@ZhengJiaAo MINGW64 /j/testfile/demo2
$ ll
total 0

#初始化git
$ git init
Initialized empty Git repository in J:/testfile/demo2/.git/

#添加内容到demo2_test.txt文件
$ echo "第一天需求" >> demo2_test.txt

#查看文件内容
$ cat demo2_test.txt
第一天需求

#查看状态:demo2_test.txt  为红色字体,说明文件还没有添加到暂存区
$ git status
On branch master
No commits yet
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        demo2_test.txt
nothing added to commit but untracked files present (use "git add" to track)

#将文件添加到暂存区
$ git add demo2_test.txt
warning: LF will be replaced by CRLF in demo2_test.txt.
The file will have its original line endings in your working directory

#查看状态: demo2_test.txt字体变成绿色,说明文件已添加到暂存区,再将文件提交到本地仓库
$ git status
On branch master
No commits yet
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   demo2_test.txt

#将暂存区的文件提交到本地仓库
$ git commit -m "first-commit:新增demo2_test.txt文件"
[master (root-commit) 970eca2] first-commit:新增demo2_test.txt文件
 1 file changed, 1 insertion(+)
 create mode 100644 demo2_test.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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# 2.2 将暂存区回退到工作区 回退修改内容

流程 2:修改 demo2_test.txt 文件内容-->将文件到暂存区-->将文件从暂存区移除-->回退修改的文件内容

命令:

#将暂存区的文件移除
git reset HEAD demo2_test.txt

#将文件修改的内容回退,就是让这个文件回到最近一次git commit或git add时的状态,git checkout – filename 可以丢弃某个文件在工作区的改动
git checkout -- demo2_test.txt

1
2
3
4
5
6

命令演示:

Administrator@ZhengJiaAo MINGW64 /j/testfile/demo2 (master)
#向文件追加内容
$  echo "第一天:追加的需求" >> demo2_test.txt

#查看文件内容
$ cat demo2_test.txt
第一天需求
第一天:追加的需求

#查看状态:demo2_test.txt 字体是红色,说明还没有添加到暂存区,将文件添加到暂存区
$ 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:   demo2_test.txt
no changes added to commit (use "git add" and/or "git commit -a")

#添加文件到暂存区
$ git add demo2_test.txt
warning: LF will be replaced by CRLF in demo2_test.txt.
The file will have its original line endings in your working directory

#查看状态:demo2_test.txt 字体变成绿色,说明文件已在暂存区
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
        modified:   demo2_test.txt

#将暂存区的文件移除
$ git reset HEAD demo2_test.txt
Unstaged changes after reset:
M       demo2_test.txt

#查看状态:demo2_test.txt字体变成红色
$ 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:   demo2_test.txt
no changes added to commit (use "git add" and/or "git commit -a")

#查看文件内容
$ cat demo2_test.txt
第一天需求
第一天:追加的需求

#将文件修改的内容回退
$ git checkout -- demo2_test.txt

#回退文件修改的内容
$ cat demo2_test.txt
第一天需求

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# 2.3 把最近一次 commit 撤回到暂存区

命令:

#查看版本库状态
$ git status
#查看commit日志
$ git log --oneline
#把最近的一次commit撤回到暂存区
$ git reset --soft HEAD^
$ git status

1
2
3
4
5
6
7
8

命令演示:

#添加文件并追加内容 "第一次修改"
$ echo "第一次修改" >> demo2_test.txt
#添加到暂存区
$ git add demo2_test.txt
#查看状态:绿色
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   demo2_test.txt
#commit提交
$ git commit -m "第一次提交文件"
[master 507c25c] 第一次提交文件
 1 file changed, 1 insertion(+)
 create mode 100644 demo2_test.txt
#查看状态:说明所有暂存区的内容已被提交
$ git status
On branch master
nothing to commit, working tree clean
#查看commit日志
$ git log --oneline
608e471 (HEAD -> master) 第一次提交文件

#把最近的一次commit撤回到暂存区
$ git reset --soft HEAD^

#查看状态:demo2_test.txt颜色绿色,已回退到暂存区
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   demo2_test.txt

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
32
33
# 2.4 回退本地版本库 commit 提交

流程 3:修改 demo2_test.txt 文件内容-->将文件到暂存区-->暂存区内容 commit 提交-->回退 commit 提交内容

命令:

#查看日志:commit提交日志
$ git log
$ git log --oneline

#回退commit提交:回到某次commit提交
$ git reset --hard commit_Id

1
2
3
4
5
6
7

命令演示:

Administrator@ZhengJiaAo MINGW64 /j/testfile/demo2 (master)
#查看文件内容
$ cat demo2_test.txt
第一天需求

#追加内容到文件
$ echo "第二天需求" >> demo2_test.txt

#查看文件内容
$ cat demo2_test.txt
第一天需求
第二天需求

#将文件添加到暂存区
$ git add demo2_test.txt
warning: LF will be replaced by CRLF in demo2_test.txt.
The file will have its original line endings in your working directory

#将暂存区内容commit提交至本地仓库
$ git commit -m "commit:修改demo2_test.txt"
[master a6d8085] commit:修改demo2_test.txt
 1 file changed, 1 insertion(+)

#查看日志:commit提交日志,可以看出有两次提交信息,现在想回到之前的“第一天需求”,“第二天需求“不需要了
$ git log
commit a6d8085e0c5e4ad6815c80128eb603132077ca9e (HEAD -> master)
Author: ZhengJa <953649948@qq.com>
Date:   Thu Oct 17 12:52:57 2019 +0800
    commit:修改demo2_test.txt

commit 970eca211415c4015143895ad1c8585f55298d00
Author: ZhengJa <953649948@qq.com>
Date:   Thu Oct 17 11:25:25 2019 +0800
    first-commit:新增demo2_test.txt文件:第一天需求

#回退commit提交:回到 ”第一天需求”
$ git reset --hard 970eca211415c4015143895ad1c8585f55298d00
HEAD is now at 970eca2 first-commit:新增demo2_test.txt文件:第一天需求

#查看状态
$ git status
On branch master
nothing to commit, working tree clean

#查看文件内容
$ cat demo2_test.txt
第一天需求

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

注:

1、git reset 和 git revert 效果一样,但区别很大 git reset :是回退 commit 未推动到远程仓库的版本 git revert :是撤退远程仓库已存在的 commit 版本

# 2.5 回退已 push 到远程版本库 commit 提交

命令

git log --oneline //查看 commit 提交列表:commit_Id

git revert HEAD //撤销最近一次提交 git revert HEAD~1 //撤销上上次的提交,注意:数字从 0 开始 git revert 0ffaacc //撤销 0ffaacc 这次提交

命令演示:

#文件追加内容
$ echo "追加的内容2" >> gittest.txt
#查看文件内容
$ cat gittest.txt
追加的内容1
追加的内容2

#添加修改内容到暂存区
$ git add gittest.txt
warning: LF will be replaced by CRLF in gittest.txt.
The file will have its original line endings in your working directory

#commit提交到本地仓库
$ git commit -m "提交:追加的内容2"
[master 37009fc] 提交:追加的内容2
 1 file changed, 1 insertion(+)

#将commit push到远程仓库
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 354 bytes | 177.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/zhengjiaao/git_test.git
   6ee6810..37009fc  master -> master

#查看commit历史记录
$ git log --oneline
37009fc (HEAD -> master, origin/master, origin/HEAD) 提交:追加的内容2
7dcf51a 提交:追加的内容1

#撤销最近一次commit,进入编辑状态,英文 ZZ 退出并保存编辑
$ git revert 37009fc
hint: Waiting for your editor to close the file... error: There was a problem with the editor 'vi'.
Please supply the message using either -m or -F option.

#查看文件内容,发现"追加的内容2"内容已经不存在
$ cat gittest.txt
追加的内容1

#将新的版本提交到远程仓库
$ git commit -m "撤销gittest文件 追加的内容2"
[master a13e1ae] 撤销gittest文件 追加的内容2
 1 file changed, 1 deletion(-)
#提交到远程仓库
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 362 bytes | 181.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/zhengjiaao/git_test.git
   37009fc..a13e1ae  master -> master

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# 2.6 清空或删除本地仓库文件

命令:

#删除本地工作区或文件
git rm demo2_test.txt

#提交删除记录 commit
git commit -m "commit:delete demo2_test.txt文件"

1
2
3
4
5
6

命令演示:

Administrator@ZhengJiaAo MINGW64 /j/testfile/demo2 (master)
#查看文件内容
$ cat demo2_test.txt
第一天需求

#查看状态
$ git status
On branch master
nothing to commit, working tree clean

#查看文件个数:1
$ ll
total 1
-rw-r--r-- 1 Administrator 197121 17 1017 12:54 demo2_test.txt

#删除本地文件
$ git rm demo2_test.txt
rm 'demo2_test.txt'

#查看本地文件个数:0
$ ll
total 0

#查看状态:demo2_test.txt字体绿色-->本地文件已删除,但是本地仓库中的文件并没有删除,要清空本地仓库的内容,提交删除的记录
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
        deleted:    demo2_test.txt

#将删除记录commit提交至本地仓库
$ git commit -m "commit:delete demo2_test.txt文件"
[master 85c603f] commit:delete demo2_test.txt文件
 1 file changed, 1 deletion(-)
 delete mode 100644 demo2_test.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
30
31
32
33
34
35
36
37
38
39
40
41

回顾工作流图: 工作流图.png

# 3、本地已有仓库 ssh 关联 远程空白仓库

1、github 添加 ssh keys Github 添加 ssh keys

2、github 新建仓库 github创建公共仓库.png

根据空白仓库提示执行: github创建公共仓库2.png

本地已有仓库与远程空白仓库关联 命令:

git remote add <name> url #name:远程仓库地址别名一般为 origin,url:远程仓库地址 git push -u origin master #推送到远程仓库的 master 分支上 -u:是强行推送(用于首次推送,之后推送只需:git push)

命令演示:

Administrator@ZhengJiaAo MINGW64 /j/testfile
#本地创建一个文件夹
$ mkdir local_test

#查看的文件夹
$ ls
demo/  demo2/  local_test/
$ cd local_test

Administrator@ZhengJiaAo MINGW64 /j/testfile/local_test
#追加内容到文件中
$ echo "# git_test" >> README.md

#查看
$ ls
README.md

#初始化git
$ git init
Initialized empty Git repository in J:/testfile/local_test/.git/

#添加文件到暂存区
$ git add README.md
warning: LF will be replaced by CRLF in README.md.
The file will have its original line endings in your working directory

#查看状态:README.md 是绿色说明已存到暂存区,再commit提交到本地仓库
$ git status
On branch master
No commits yet
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   README.md

#将暂存区所有内容提交到本地仓库
$ git commit -m "first commit"
[master (root-commit) c02fd60] first commit
 1 file changed, 1 insertion(+)
 create mode 100644 README.md

#添加远程仓库:本地仓库与远程仓库关联
$ git remote add origin git@github.com:zhengjiaao/git_test.git

#推送到远程仓库的master分支上 -u:是强行推送(用于首次推送,之后推送只需:git push)
$ git push -u origin master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 219 bytes | 73.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:zhengjiaao/git_test.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

上传文件后 github 效果图: github创建公共仓库3.png

README.md 文件是我们本地"echo "# git_test" >> README.md"创建的,然后推送到 github 的远程仓库上

# 4、克隆仓库

描述: 远程已有仓库-这个比较简单 流程:克隆远程已有仓库地址 --> 修改文件内容 --> 将修改内容推送到远程仓库 命令:

#克隆远程已有仓库地址
$ git clone url

#操作:修改文件内容

#将修改内容推送到远程仓库
$ git add
$ git commit -m "commit 信息"
$ git push

1
2
3
4
5
6
7
8
9
10

命令演示:

Administrator@ZhengJiaAo MINGW64 /j/testfile
#查看文件:有3个文件夹
$ ls
demo/  demo2/  local_test/

#克隆远程已有仓库地址
$ git clone https://github.com/zhengjiaao/git_test.git
Cloning into 'git_test'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.

#查看:多了一个文件夹 git_test
$ ls
demo/  demo2/  git_test/  local_test/

#进入文件夹
$ cd git_test/

#查看:有一个README.md文件
$ ls
README.md

#向 README.md文件追加内容
$ echo "### 测试k克隆远程已有仓库及推送此内容到远程仓库" >> README.md

#查看状态 :README.md 字体是红色:说明工作区修改后-->还没有添加至暂存区
$ git status
On branch master
Your branch is up to date with 'origin/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:   README.md
no changes added to commit (use "git add" and/or "git commit -a")

#添加 README.md文件到暂存区
$ git add README.md
warning: LF will be replaced by CRLF in README.md.
The file will have its original line endings in your working directory

#将暂存区所有内容commit提交到本地仓库
$ git commit -m "commit: 推送到远程仓库"
[master 44a593d] commit: 推送到远程仓库
 1 file changed, 1 insertion(+)

#将本地commit提交的内容 全部推送到远程仓库
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 344 bytes | 172.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/zhengjiaao/git_test.git
   c02fd60..44a593d  master -> master

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

推送完成看下 github 远程仓库效果:刷新页面 github创建公共仓库4.png

可以看出,我们修改的文件内容已推送到 GitHub 的远程仓库上

# 5、标签管理

在版本库里打个标签,将来在某一时刻想要之前的版本,我们就可以根据标签取出想要的版本. 常用命令:

#查看所有标签名称
$ git tag
#查看标签的详细信息(包含commit的信息)
$ git show tagname
#显示标签名及其描述信息
$ git tag -ln tagname

#创建标签,默认是根据最新的commit打标签,也可以指定某个commit_Id打标签
$ git tag tagname
#指定某个commitId创建标签
git tag tagname commit_Id
#指定提交信息,创建标签同时添加说明信息
$ git tag -a tagname -m "comment"

#切换至指定标签,在某个标签上继续开发
$ git checkout tagname
#退出标签,切换到指定分支即可
$ git checkout branchname

#推送某个标签到远程
$ git push origin tagname
#推送所有尚未推送的本地标签
$ git push origin --tags

#删除本地指定标签  仅删除本地
$ git tag -d tagname
#删除远程仓库的指定标签
$ git push origin -d tag tagname

#获取远程某个标签信息(没有获取代码)
$ git fetch origin tag tagname

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
32

选用一个项目测试标签: 进入一个本地仓库:这里选用之前测试用到的 git_test 仓库

Administrator@ZhengJiaAo MINGW64 /j/testfile/git_test (master)
#查看文件
$ ls
README.md

#查看文件内容
$ cat README.md
# git_test
### 测试k克隆远程已有仓库及推送此内容到远程仓库

#向文件追加内容
$ echo "## 标签测试 1" >> README.md

#查看状态:README.md红色 ,工作区修改了文件未添加到暂存区
$ git status
On branch master
Your branch is up to date with 'origin/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:   README.md
no changes added to commit (use "git add" and/or "git commit -a")

#将修改的文件
$ git add README.md
warning: LF will be replaced by CRLF in README.md.
The file will have its original line endings in your working directory

#将暂存区内容提交到本地仓库
$ git commit -m "commit:标签测试1 提交"
[master b1070cb] commit:标签测试1 提交
 1 file changed, 1 insertion(+)

#查看状态
$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
nothing to commit, working tree clean

#推送到远程仓库
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 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)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/zhengjiaao/git_test.git
   44a593d..b1070cb  master -> master


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

github 远程仓库效果: github标签测试1.png

创建标签并推送至远程仓库: 命令:

#创建本地标签
$ git tag tagname
#将创建的本地标签推送到远程仓库
$ git push origin tagname

1
2
3
4
5

命令演示:

Administrator@ZhengJiaAo MINGW64 /j/testfile/git_test (master)
#查看标签
$ git tag

#创建标签
$ git tag v1.0.1

#查看标签
$ git tag
v1.0.1

#将本地标签推送到github远程仓库
$ git push origin v1.0.1
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/zhengjiaao/git_test.git
 * [new tag]         v1.0.1 -> v1.0.1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

标签推送到远程仓库成功!

注:当修改的代码没有 commit,也能打标签,但不会将工作区修改的内容打进标签,只有将修改的内容 commit 后才会打进标签中,然后提交标签到远程。

1、工作区修改的代码,没有 commit,也能打标签,但是标签不包含工作区修改的代码 2、工作区修改的代码,commit 保存,可以将修改的代码打进标签,然后推送到远程,远程标签中也存在修改的代码,但若没有 push 本次 commit 信息到远程分支,远程分支是不会有 commit 提交信息

github 查看标签: github标签测试2.png

删除标签: 命令:

    #删除本地指定标签  仅删除本地
    $ git tag -d v1.0.1
    #删除远程仓库的指定标签
    $ git push origin -d tag v1.0.1

1
2
3
4
5

命令演示:

    Administrator@ZhengJiaAo MINGW64 /j/testfile/git_test (master)
    #查看标签
    $ git tag
    v1.0.1

    #删除本地指定标签  仅删除本地
    $ git tag -d v1.0.1
    Deleted tag 'v1.0.1' (was b1070cb)

    #查看标签:发现标签 v1.0.1 已不存在
    $ git tag

    #删除远程仓库的指定标签
    $ git push origin -d tag v1.0.1
    To https://github.com/zhengjiaao/git_test.git
     - [deleted]         v1.0.1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

切换到指定标签-->创建新的分支: 命令:

    #切换至指定标签
    $ git checkout tagname
    #退出标签,切换到指定分支即可
    $ git checkout branchName

    #切换至指定标签,在某个标签上继续开发,开发完成可以创建新的分支
    $ git checkout tagname
    #这是git的最新版的命令:创建分支并切换至新分支
    $ git switch -c branchName

1
2
3
4
5
6
7
8
9
10

# 6、分支管理

分支操作常用命令:

git branch #显示所有本地分支, * 是当前分支 git branch -r #显示所有远程分支 git branch -a #显示所有分支(本地和远程)

git branch -v #显示本地分支最近一次提交信息 git branch -a -v #显示左右分支最后一次提交信息

git merge <name> # 合并某分支到当前分支

git branch --merged # 已经合并的分支列表,git branch -d 可删除成功 git branch --no-merged # 未合并的分支列表,删除不成功,-D 选项强制删除它

git branch <name> # 创建新分支 git checkout <name> # 切换到指定分支 git checkout -b <name> # 从本地已有的当前分支-->创建新分支->切换至新分支 相当于上面两步操作 git checkout -b dev origin/dev # 从远程已有分支-->创建新分支->切换至新分支,并与远程分支关联 git switch <name> # 切换分支(推荐,但 git 需要升级到最新版本),没有分支不会自动创建 git switch -c dev # 创建并切换新分支或直接切换已有分支上 (推荐,但是 git 需要升级到最新版本)

git merge dev #合并分支

git branch -d dev #删除已经合并的分支,未合并的分支删除不了 git branch -D dev #强力删除分支,会丢掉未合并的内容

Git 鼓励大量使用分支流程: 查看分支:git branch 创建分支:git branch <name> 切换分支:git checkout <name>或者git switch <name> 创建+切换分支:git checkout -b <name>或者git switch -c <name> 合并某分支到当前分支:git merge <name> 删除分支:git branch -d <name>

本地仓库的分支创建、合并、删除:

#查看分支
$ git branch
* master
#从当前master创建新分支dev
$ git branch dev
#查看分支
$ git branch
  dev
* master
#修改dev分支中test文件内容
$ echo "dev修改文件内容" >> test.txt
#将修改内容添加至暂存区,让git版本库管理
$ git add test.txt
#将暂存区内容提交到本地仓库
$ git commit -m "dev修改text内容"
[dev 7e62af8] dev修改text内容
 1 file changed, 1 insertion(+)
#切换至master分支
$ git switch master
#当前master合并dev分支内容
$ git merge dev
Updating 4115cf8..7e62af8
Fast-forward
 test.txt | 1 +
 1 file changed, 1 insertion(+)
#查看test文件内容
$ cat test.txt
dev修改文件内容

#删除dev分支,必须是已经合并成功,不然删除不掉dev分支,强力删除可以用 -D
$ git branch -d dev
Deleted branch dev (was 7e62af8).
#查看分支
$ git branch
* master

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
32
33
34
35
36

创建本地仓库分支并上传到远程仓库:

#查看所有分支(本地和远程)
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

#新建本地dev分支
$ git switch -c dev
Switched to a new branch 'dev'

#远程没有dev分支,本地有dev
$ git branch -a
* dev
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

#将本地dev分支推送到远程仓库
Administrator@ZhengJiaAo MINGW64 /j/testfile/git_test (dev)
$ git push --set-upstream origin dev
Total 0 (delta 0), reused 0 (delta 0)
remote:
remote: Create a pull request for 'dev' on GitHub by visiting:
remote:      https://github.com/zhengjiaao/git_test/pull/new/dev
remote:
To github.com:zhengjiaao/git_test.git
 * [new branch]      dev -> dev
Branch 'dev' set up to track remote branch 'dev' from 'origin'.

#推送成功 :remotes/origin/dev
$ git branch -a
* dev
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev
  remotes/origin/master

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
32
33
34
35
36
37

删除仓库分支:

git branch -d <branch-name> 删除分支
git push origin --delete <branch-name> 删除远程分支

#查看所有分支
$ git branch -a
* dev
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev
  remotes/origin/master
#删除远程仓库分支
$ git push origin --delete dev
To github.com:zhengjiaao/git_test.git
 - [deleted]         dev
#查看所有分支:发现远程仓库已经没有dev分支
$ git branch -a
* dev
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
#切换到master分支
$ git switch master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
#删除本地分支,注意dev分支要是已合并的分支,不然删除报错,可以用 -D 强力删除,但会丢失dev开发的代码,所以要先合并分支,再删除分支
$ git branch -d dev
Deleted branch dev (was b1070cb).
#查看所有分支:发现本仓库已没有dev分支
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

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

###7、远程仓库管理

远程仓库添加、重命名、删除等操作。 命令:

#查看远程仓库别名或路径
$ git remote
$ git remote -v

#删除关联的远程仓库路径
$ git remote rm origin

#添加远程仓库:origin远程仓库别名,url远程仓库地址
$ git remote add origin url

#修改远程仓库别名
$ git remote rename origin oldorigin
$ git remote
oldorigin

#添加多个远程仓库
$ git remote add origin url
$ git remote
oldorigin
origin

本地仓库和远程仓库:

#本地删除远程仓库
$ git remote rm origin
#发现已经没有远程仓库
$ git remote

#添加远程仓库
$ git remote add origin git@github.com:zhengjiaao/git_test1.git
#查看远程仓库
$ git remote
origin

#远程仓库重命名
$ git remote rename origin oldorigin
$ git remote
oldorigin

#添加多个远程仓库
$  git remote add origin git@github.com:zhengjiaao/git_test2.git
$ git remote
oldorigin
origin

多个远程仓库推送和下拉需要指定仓库别名 如:

git pull origin master git pull oldorigin master git push origin master git push oldorigin master

一次推送到多个远程仓库: 上面是不是感觉麻烦,两个远程仓库要推送两次,也可以一次推送到多个远程仓库: 命令:

#url 是第二个(或大于第二个)远程仓库
$ git remote set-url --add origin url

命令演示:

#有一个远程仓库
$ git remote -v
origin  git@github.com:zhengjiaao/git_test.git (fetch)
origin  git@github.com:zhengjiaao/git_test.git (push)

#添加第二个远程仓库
$ git remote set-url --add origin git@github.com:zhengjiaao/git_test2.git
#查看发现多了一个远程仓库,别名都是origin 一致的
$ git remote -v
origin  git@github.com:zhengjiaao/git_test.git (fetch)
origin  git@github.com:zhengjiaao/git_test.git (push)
origin  git@github.com:zhengjiaao/git_test2.git (push)

一次推送到多个远程仓库 如:

git push origin master

# 7、git 提交规范

commit message格式说明
Commit message一般包括三部分:Header、Body和Footer。

Header
type(scope):subject

type:用于说明commit的类别,规定为如下几种
feat:新增功能;
fix:修复bug;
docs:修改文档;
refactor:代码重构,未新增任何功能和修复任何bug;
build:改变构建流程,新增依赖库、工具等(例如webpack修改);
style:仅仅修改了空格、缩进等,不改变代码逻辑;
perf:改善性能和体现的修改;
chore:非src和test的修改;
test:测试用例的修改;
ci:自动化流程配置修改;
revert:回滚到上一个版本;
scope:【可选】用于说明commit的影响范围
subject:commit的简要说明,尽量简短
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 8、git 同步远程仓库 A 和远程仓库 B

AB目录.png

B 是从源 A 上 fork 出来的:

远程(源)A B fork A 远程 B
pro pro
test 被删除
test2.5 被删除
dev:是 peo 分化出来的新分支
新增 test2.6
# 8.1 前提:绑定远程仓库

本地新建仓库(your_AB) 绑定远程 A 和 远程 B 仓库

#进入your_AB文件夹下,初始化本地仓库
$ git init

#关联多个远程仓库
$ git remote add A https://github.com/zhengjiaao/A.git
$ git remote add B https://github.com/zhengjiaao/B.git

#查看本地仓库关联的所有远程仓库地址,能查到 A和B 说明绑定成功
$ git remote -v

1
2
3
4
5
6
7
8
9
10
# 8.2 情况一:B 获取远程 A 新增的 test2.6 分支

前提:如果没有绑定远程仓库请参考上面 【前提:绑定远程仓库】

#更新远程仓库数据信息到本地仓库your_AB,不是将远程仓库代码下拉到本地
$ git fetch A test2.6
$ git fetch B

#查看 远程仓库分支信息
$ git branch -r

#创建本地分支且关联的远程分支,注:test2.6是A远程仓库上的新增的分支,且B仓库不存在
$ git checkout -b test2.6 A/test2.6

#推送本地分支到远程仓库并在远程仓库创建新分支 ,注:B 为设置的远程仓库别名,第一个test2.6为本地分支名,第二个test2.6为远程分支名
$ git push B test2.6:test2.6

1
2
3
4
5
6
7
8
9
10
11
12
13
# 8.3 情况二:B dev 获取 远程 A 仓库 test2.6 某次 cimmit

前提:如果没有绑定远程仓库请参考上面 【前提:绑定远程仓库】

#更新远程仓库数据信息到本地仓库your_AB,不是将远程仓库代码下拉到本地
$ git fetch A test2.6
$ git fetch B dev

#创建本地分支且关联的远程分支
$ git checkout -b test2.6 A/test2.6
$ git checkout -b dev B/dev

#切换到本地test2.6分支
$ git checkout test2.6

#查看test2.6分支 commit提交的日志 , 退出日志 英文状态下按Q
$ git log
commit 3c03d1c376ccc8c58d1f232c5e0f57cdeba8df53
Author: Zhengjiaao <1263598336@qq.com>
Date:   Tue Oct 15 09:52:46 2019 +0800
    your_fork:新增fork9文件

#切换到B_pro分支
$ git checkout dev

#根据提交日志中的 commit Id 合并某次 commit
$ git cherry-pick 3c03d1c376ccc8c58d1f232c5e0f57cdeba8df53

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 8.4 情况三:A pro 获取 B dev 某个文件

前提:如果没有绑定远程仓库请参考上面 【前提:绑定远程仓库】

#更新远程仓库数据信息到本地仓库your_AB,不是将远程仓库代码下拉到本地
$ git fetch A pro
$ git fetch B dev

#创建本地分支且关联的远程分支
$ git checkout -b pro A/pro
$ git checkout -b dev B/dev

#首先切换到A仓库的 pro 分支
$ git checkout pro

#将dev分支的view文件夹下index.html文件合并到分支pro
$ git checkout B view/index.html

#下拉A
$ git pull A pro

# 推送到A远程仓库
$ git push A pro

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 9、git stash 开发常见操作场景


git stash 的用法:

要达到的目的是:开发如何保证每次 commit 都是原子性的

开发常见主要场景有:

  • 1、修改 bug 的代码 A 和新增功能的代码 B 都在同一个文件,如何做到分两次提交,每次提交的 commit 只做一件事
  • 2、正在开发新接口 A,这个时候需要紧急修改 bug B,而接口 A 开发一半还不想提交到远程仓库,这个时候怎么办
  • 3、同时开发新接口 AB,AB 又有很多代码都是在同一个文件中,怎么样子才能做到每个 commit 都是原子性的
# 9.1 修改 bug 的代码 A 和新增功能的代码 B 都在同一个 test.java 文件,如何做到分两次提交,每次提交的 commit 只做一件事

方式一:

描述:修改 bug 的代码 A 完事后,直接提交,新增功能的代码 B 写完后直接提交

流程:

#在test.java中 修改bug代码A,修改好后
#添加到暂存区
$ git add .

#将修改的代码保存到本地仓库
$ git commit -m "在test.java中 修改bug代码A"

#提交到远程仓库
$ git push

#在test.java中 新增功能的代码B,新增完后
#添加到暂存区
$ git add .

#将修改的代码保存到本地仓库
$ git commit -m "在test.java中 新增功能代码B"

#提交到远程仓库
$ git push

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

方式二:

描述:同一个文件中 有 修改 bug 代码和新增功能代码,保证每次提交只做一件事(修改 bug 或新增功能)

流程:将 同一个文件修改 bug 和新增功能 代码 保存到堆栈中 --> 将堆栈中代码恢复到当前工作目录 --> 手动删除文件中新增功能代码 --> 将 修改 bug 代码 提交到远程仓库 --> 再次将堆栈中代码恢复到当前工作目录 --> 将 新增功能代码 提交到远程仓库

命令:

#将所有未提交的修改(工作区和暂存区)保存至堆栈中,用于后续恢复当前工作目录
git stash push -m "message"
#拉取最新代码
git pull
#将保存至堆栈的内容 恢复到当前工作目录
git stash apply

1
2
3
4
5
6
7

具体实现:

#将修和新增功能的文件保存到暂存区,让git版本库管理
$ git add .
#查看状态
$ git status

#将 同一个文件修改bug和新增功能 代码 保存到堆栈中
$ git stash push -m "同一个文件修改bug和新增功能 代码 "

#拉取最新代码
git pull

#查看堆栈中保存的列表
$ git stash list
stash@{0}: On master: 同一个文件修改bug和新增功能 代码

#根据堆栈列表序列  将 “同一个文件修改bug和新增功能 代码” 恢复到当前工作目录
$ git stash apply stash@{0}

#注意:此时,手动删除文件中新增功能代码,仅保留修改bug代码(目的:保证每次commit都具有原子性)

#将 修改bug代码 提交到远程仓库
$ git add .
$ git commit -m "修改bug代码提交"
$ git push

#根据堆栈列表序列  再次将 “同一个文件修改bug和新增功能 代码” 恢复到当前工作目录
$ git stash apply stash@{0}

#将 新增功能代码 提交到远程仓库
$ git add .
$ git commit -m "新增功能代码提交"
$ git push

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
32
33
# 9.2 正在开发新接口 A,这个时候需要紧急修改 bug 接口,而接口 A 开发一半还不想提交到远程仓库,这个时候怎么办

2.1 修改的 bug 的内容 在不影响新开发接口 A 的情况,也是不存在冲突的情况

命令:

#将所有未提交的修改(工作区和暂存区)保存至堆栈中,用于后续恢复当前工作目录
git stash push -m "message"
#拉取最新代码
git pull
#将保存至堆栈的内容 恢复到当前工作目录
git stash apply

1
2
3
4
5
6
7

具体实现:

#将A接口功能未完成代码 添加至暂存区,让git版本库管理
$ git add .

#将(暂存区或工作区)内容保存到堆栈中
$ git stash push -m "A接口功能未完成代码"

#下拉新的代码
$ git pull

#注意:这里是 修改bug代码 的操作

#修改bug完成,添加到暂存区
$ git add .

#提交bug修改代码
$ git commit -m "提交bug修改代码"

#将修改内容,提交到远程仓库
$ git push

#查看堆栈中保存的列表
$ git stash list
stash@{0}: On master: A接口功能未完成代码

#根据堆栈列表序列  将 “A接口功能未完成代码” 恢复到当前工作目录
$ git stash apply stash@{0}

#继续开发新的接口A的功能代码

#A接口功能开发完成,将A接口功能提交到远程仓库
$ git add .
#提交新开发的接口A
$ git commit -m "提交新开发的接口A"
#将修改内容,提交到远程仓库
$ git push

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
32
33
34
35
36

2.2 前提:修改的 bug 的内容 会影响新开发接口 A 的情况,存在冲突的情况

命令:

#将所有未提交的修改(工作区和暂存区)保存至堆栈中,用于后续恢复当前工作目录
git stash push -m "message"
#拉取最新代码
git pull
#将保存至堆栈的内容 恢复到当前工作目录
git stash apply

1
2
3
4
5
6
7

具体实现:

#将A接口功能未完成代码 添加至暂存区,让git版本库管理
$ git add .

#将(暂存区或工作区)内容保存到堆栈中
$ git stash push -m "A接口功能未完成代码"

#下拉新的代码
$ git pull

#注意:这里是 修改bug代码 的操作

#修改bug完成,将修改bug代码 提交到远程仓库
$ git add .
$ git commit -m "提交bug修改代码"
$ git push

#查看堆栈中保存的列表
$ git stash list
stash@{0}: On master: A接口功能未完成代码

#根据堆栈列表序列  将 “A接口功能未完成代码” 恢复到当前工作目录,发现test.txt文件内容有冲突,需要手动解决冲突
$ git stash apply stash@{0}
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt

#打开test.txt 文件 查看冲突内容,这时候要手动打开磁盘上文件找到冲突位置解决冲突内容
$ cat test.txt
<<<<<<< Updated upstream
修改bug代码D
=======
新增功能代码A
>>>>>>> Stashed changes

#先冲突解决,再继续开发新的接口A的功能代码

#A接口功能代码开发完成,将A接口功能提交到远程仓库
$ git add .
$ git commit -m "提交新开发的接口A"
$ git push

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
32
33
34
35
36
37
38
39
40
# 9.3 同时开发新接口 AB,AB 又有很多代码都是在同一个文件中,怎么样子才能做到每个 commit 都是原子性的

描述:开发 A、B 两个新接口,同时开发,开发中有操作有相同的文件,但开发完成后提交时,需要保证每个提交 commit 都是具有原子性。

流程:开发 AB 到一半时(或同时完成开发)-->将 AB 同时保存到堆栈中-->再将 AB 恢复到当前工作目录(但堆栈中并不删除)-->将 B 的所有内容删除-->完成 A 接口的功能开发并提交到远程仓库-->将堆栈中 AB 再次恢复到当前工作目录-->删除从堆栈中的拿到的 A 的代码并解决冲突-->再继续开发 B 接口的功能-->提交 B 接口的功能到远程仓库

命令:

#将所有未提交的修改(工作区和暂存区)保存至堆栈中,用于后续恢复当前工作目录
git stash push -m "message"
#拉取最新代码
git pull
#将保存至堆栈的内容 恢复到当前工作目录
git stash apply

1
2
3
4
5
6
7

具体实现:

#将A、B接口功能未开发完成的代码,添加至暂存区(让git版本管理)
$ git add .

# 将A、B接口功能 未完成代码全部保存到堆栈中
$ git stash push -m "A、B接口功能 未完成代码"

#拉取最新代码
git pull

#将堆栈中保存的 "A、B接口功能 未完成代码" 恢复到当前工作目录(注:堆栈中并不删除 “A、B接口功能 未完成代码”)
$ git stash apply

#注意:此时,手动将恢复的B接口功能的所有代码删除,只保留A接口功能代码(目的:每次commit都具有原子性)

#继续开发A接口功能代码,A接口功能代码开发完成,将A接口功能代码全部提交到远程仓库
$ git add .
$ git commit -m "commit:提交完整A接口功能"
$ git push

#将堆栈中保存的 "A、B接口功能 未完成代码" 再次恢复到当前工作目录(注:堆栈中并不删除),可能会出现冲突,需要手动解决
$ git stash apply

#注意:此时,需手动解决代码的冲突(解决方式:删除所有从堆栈中恢复的A接口功能未完成代码),只保留B接口功能代码(目的:每次commit都具有原子性)

#继续开发B接口功能代码,B接口功能代码开发完成,将B接口功能代码全部提交到远程仓库
$ git add .
$ git commit -m "commit:提交完整B接口功能"
$ git push

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

注: 每次 commit 都具有原子性: 是说每次 commit 只做一件完整的事情,如,修改一个 BUG 或是完成一个接口功能开发。切记,不能 commit 提交一次包含 "新增功能修改bug"

  • 更多高级使用参考地址: https://www.jianshu.com/nb/40275462