title: git 常用命令
date: 2021/02/03 10:39
1、配置用户信息(git config 命令)
# 配置git用户名:随便起,最好好写成自己的拼音名字,这样提交代码到远程仓库,别人知道是你提交的
$ git config --global user.name "yujx"
# 配置git邮箱:邮箱格式要对,不要求邮箱是真的
$ git config --global user.email "[email protected]"
# 查询所有的配置项
$ git config --list
# 查询单个配置项信息
$ git config <配置项名称,例如:user.email>
2、本地仓库相关命令
本地仓库分为三部分:工作区,暂存区,仓库区,其中暂存区、仓库区是版本库部分
注:图上关于 HEAD 的地方写错了,HEAD 是指当前活跃分支的游标。
2.1 将修改提交到本地仓库
命令:
#初始化git版本库
git init
#将文件添加到暂存区
git add
#将暂存区的文件提交到本地仓库
git commit -m "提交描述信息"
# 查看提交(包括本地仓库和远程仓库的提交)的详细信息
git log
# 用简短的一行来显示提交信息
git log --oneline
命令演示:
# 创建一个新文件夹,并进入
$ mkdir git_demo01
$ cd git_demo01
# 将这个文件夹初始化为一个新的 git 仓库
$ git init
Initialized empty Git repository in /Users/x5456/Desktop/git_demo01/.git/
# 新增一个文件
$ echo "第一个需求" >> 1.txt
$ cat 1.txt
第一个需求
# 查看当前暂存区的状态
$ git status
On branch master # 在 master 分支
No commits yet # 有以下内容还没有提交
Untracked files:
(use "git add ..." to include in what will be committed) # 这段话是提示我们使用 git add 命令把它加入暂存区
1.txt # 注:这个地方显示的为红色,表示这个文件还没有被加入暂存区
nothing added to commit but untracked files present (use "git add" to track)
# 将 1.txt 加入暂存区
$ git add 1.txt
# 查看当前暂存区的状态
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached ..." to unstage) # 这段话是提示我们使用 git rm 命令可以把它移出暂存区
new file: 1.txt # 这个地方变成了绿色,表示可以被提交了
# 查看当前分支的提交记录
$ git log --oneline
fatal: your current branch 'master' does not have any commits yet # 报错:当前分支没有任何提交记录
# 提交 1.txt
$ git commit -m "提交第一个需求"
[master (root-commit) 37c54c5] 提交第一个需求
1 file changed, 1 insertion(+)
create mode 100644 1.txt
# 再次查看当前分支的提交记录
$ git log --oneline
37c54c5 (HEAD -> master) 提交第一个需求 # HEAD 指向了我们最新的一次提交
# 查看当前暂存区的状态
$ git status
On branch master
nothing to commit, working tree clean # 没有啥可提交的
2.2 清空或删除本地仓库文件
命令:
# 将文件从工作区和暂存区移除
git rm <文件名,例如:1.txt>
# 删除工作区和暂存区全部文件
git rm -r .
命令演示:
# 删除工作区和暂存区全部文件
$ git rm -r .
rm '1.txt'
# 使用 ls 命令查看,工作区的所有文件已经被清空
$ ls
# 查看当前暂存区的状态
$ git status
On branch master
Changes to be committed:
# 讲下面这个命令之前先回顾一下 HEAD 是什么?
# HEAD 表示本地当前活跃分支的游标(一般指向最新一次 commit,可以使用 reset 命令指向其他 commit)
# 所以这个命令的意思是,将 重置到当前 HEAD 指向的 commit 的样子,以撤销你对他的更改。但执行这个命令只会将这个修改从暂存区移除,文件在工作区还是处于删除状态的。
# 如果想要恢复文件,可以再执行 git checkout [HEAD] -- 1.txt 进行恢复文件
# reset 命令后面会详细的讲。
(use "git reset HEAD ..." to unstage)
deleted: 1.txt # 此处为绿色,表示这个文件已经在暂存区删除了,等待提交
# 提交到本地仓库
$ git commit -m "清空仓库"
[master 90bc8da] 清空仓库
1 file changed, 1 deletion(-)
delete mode 100644 1.txt
$ git log --oneline
90bc8da (HEAD -> master) 清空仓库 # 此时 HEAD 就指向了最新一次提交
37c54c5 提交第一个需求
3、与远程仓库进行关联
在 github 上创建仓库就不讲了。
3.1 推送提交到远程仓库
命令:
# name:远程仓库地址别名一般为origin;url:远程仓库地址
git remote add url
# 推送到远程仓库的master分支上(用于首次推送,之后推送只需:git push),-u 等同于 --set-upstream,这个命令表示将本地分支与远程分支 origin/master 绑定
git push -u origin master
# 强制 push
# 推送不上去的原因在于:git仓库中已经有一部分代码,所以它不允许你直接把你的代码覆盖上去。
# 有两种解决办法,一是加上 -f 参数,二是先 fetch 再 merge,合并好了再 push。
git push -f
命令演示:
# 为本地仓库添加远程仓库
$ git remote add origin https://github.com/x54256/git_demo01.git
# 查看远程仓库信息
$ git remote
origin
# 查看远程仓库详细信息
$ git remote -v
origin https://github.com/x54256/git_demo01.git (fetch) # 拉代码的地址
origin https://github.com/x54256/git_demo01.git (push) # 推代码的地址
# 查看提交记录
$ git log --oneline
37c54c5 (HEAD -> master) 提交第一个需求
# 将本地提交记录 push 到远程仓库中
$ git push -u origin master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 239 bytes | 239.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/x54256/git_demo01.git
* [new branch] master -> master
# 查看提交记录,发现此时多了一个 origin/master,表示远程仓库是哪次提交的版本
$ git log --oneline
37c54c5 (HEAD -> master, origin/master) 提交第一个需求
3.2 克隆仓库
命令:
# 克隆远程已有仓库地址
$ git clone url
3.3 远程仓库管理
# 查看远程仓库别名或路径
$ git remote
$ git remote -v
# 删除关联的远程仓库路径
$ git remote rm origin
# 添加远程仓库:origin远程仓库别名,url远程仓库地址
$ git remote add origin url
# 修改远程仓库别名
$ git remote rename origin neworigin
4、重置(git reset)
我们先多提交几次,直接执行我下面的命令就好。
echo " 第二次提交" >> 2.txt
git add .
git commit -m "第二次提交"
echo " 第三次提交" >> 3.txt
git add .
git commit -m "第 三次提交"
git push
命令格式:git reset [--soft | --mixed | --hard] [HEAD]
注:
命令释义:将 HEAD 指向我们所选提交。
命令参数:
命令 | 释义 |
---|---|
--mixed(默认) | 将暂存区恢复为【指定提交】的样子,当前工作区与【指定提交】不同的地方不放进暂存区。 |
--soft | 将暂存区恢复为【指定提交】的样子,当前工作区与【指定提交】不同的地方放进暂存区。 |
--hard | 将暂存区和工作区恢复为【指定提交】的样子,注意:任何本地变更都会丢失 |
那么他就可以帮我们做如下几件事:
- 丢弃暂存区的修改(可是我为啥要把更改从暂存区移除呢?直接用 checkout 命令从工作区移除不也就从暂存区移除了吗)
# 修改 1.txt,将其加入暂存区
$ vim 1.txt
$ git add 1.txt
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD ..." to unstage)
modified: 1.txt # 这个现在是绿色的表示在暂存区
# 将暂存区重置为上次提交的样子
$ git reset [--mixed] HEAD
Unstaged changes after reset: # 本地与上次提交不同的有 1.txt,M 表示这个文件是被修改了
M 1.txt
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
modified: 1.txt # 因为 --mixed 不会改变工作区,所以 1.txt 还是修改之后的样子,所以再次使用 git status 查看,还是会有这个文件,颜色变为红色,表示没有放入暂存区。
no changes added to commit (use "git add" and/or "git commit -a")
- 将没有 push 的提交恢复到暂存区
# 修改 1.txt 作为第 4 次提交
$ vim 1.txt
$ git add 1.txt
$ git commit -m "第四次提交"
[master eacd509] 第四次提交
# 新增 5.txt 作为第五次提交
echo "第五次提交" >> 5.txt
$ git add .
$ git commit -m "第5次提交"
[master 79eded9] 第5次提交
1 file changed, 1 insertion(+)
create mode 100644 5.txt
# 查看提交记录
$ git log --oneline
79eded9 (HEAD -> master) 第5次提交 # 本地指针指向最新的
eacd509 第四次提交
e5c4555 (origin/master) 第 三次提交 # 远程仓库指向
44e316d 第二次提交
37c54c5 提交第一个需求
# 通过 reset 命令回退这两次提交,因为使用了 --soft 命令,所以将其放入了暂存区
$ git reset --soft e5c4555
# 再次查看提交记录,发现后两次的已经没有了
$ git log --oneline
e5c4555 (HEAD -> master, origin/master) 第 三次提交
44e316d 第二次提交
37c54c5 提交第一个需求
# 查看暂存区的状态
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD ..." to unstage)
modified: 1.txt # 绿色的表示在暂存区
new file: 5.txt
- 将工作区恢复成之前的某次提交
# 查看提交记录,一共有三条提交记录
$ git log --oneline
e5c4555 (HEAD -> master, origin/master) 第 三次提交
44e316d 第二次提交
37c54c5 提交第一个需求
# 将本地工作区恢复成第一条记录的样子,注意,本地所有没有 push 的更改都会被清除
$ git reset --hard 37c54c5
HEAD is now at 37c54c5 提交第一个需求
$ ls
1.txt
$ git log --oneline
37c54c5 (HEAD -> master) 提交第一个需求
# 如果想要恢复工作区和远程仓库一样,就需要重新 pull
$ git pull
Updating 37c54c5..e5c4555
Fast-forward
2.txt | 1 +
3.txt | 1 +
2 files changed, 2 insertions(+)
create mode 100644 2.txt
create mode 100644 3.txt
$ git log --oneline
e5c4555 (HEAD -> master, origin/master) 第 三次提交
44e316d 第二次提交
37c54c5 提交第一个需求
$ ls
1.txt 2.txt 3.txt
- 将已经 push 的提交撤回
# 前面都一样
$ git log --oneline
e5c4555 (HEAD -> master, origin/master) 第 三次提交
44e316d 第二次提交
37c54c5 提交第一个需求
$ git reset --hard 37c54c5
HEAD is now at 37c54c5 提交第一个需求
# 如果用“git push”会报错,因为我们本地库HEAD指向的版本比远程库的要旧,-f 强制推送
$ git push -f
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/x54256/git_demo01.git
+ e5c4555...37c54c5 master -> master (forced update)
$ git log --oneline
37c54c5 (HEAD -> master, origin/master) 提交第一个需求
reset 原理
5、撤销 commit(git revert)
撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程。
命令:
git revert [HEAD]
命令示例:
# 查看提交记录
$ git log --oneline
6db2d6f (HEAD -> master, origin/master) 第 三次提交
aae30ef 第二次提交
37c54c5 提交第一个需求
# 回滚第一个提交
$ git revert 37c54c5
[master 6a6d51f] Revert "提交第一个需求"
1 file changed, 1 deletion(-)
delete mode 100644 1.txt
# 我们发现 1.txt 已经不存在了
$ ls
2.txt 3.txt
# 查看暂存区,发现什么也没有,证明 revert 的操作是会自动提交到本地仓库的
$ 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 log --oneline
6a6d51f (HEAD -> master) Revert "提交第一个需求"
6db2d6f (origin/master) 第 三次提交
aae30ef 第二次提交
37c54c5 提交第一个需求
# 将这次提交推送到远程仓库
$ git push
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 349 bytes | 349.00 KiB/s, done.
Total 2 (delta 0), reused 0 (delta 0)
To https://github.com/x54256/git_demo01.git
6db2d6f..6a6d51f master -> master
6、分支管理
命令:
# 显示所有本地分支, * 是当前分支
git branch
# 显示所有远程分支
git branch -r
# 显示所有分支(本地和远程)
git branch -a
# 显示本地分支最近一次提交信息
git branch -v
# 显示所有分支最后一次提交信息
git branch -a -v
# 显示本地分支与远程分支的关联信息
git branch -vv
# 合并某分支到当前分支
git merge
# 已经合并的分支列表,git branch -d 可删除成功
git branch --merged
# 未合并的分支列表,删除不成功,-D 选项强制删除它
git branch --no-merged
# 创建新分支
git branch
# 切换到指定分支
git checkout
# 从本地已有的当前分支 == 创建新分支 + 切换至新分支
git checkout -b
# 从远程已有分支创建新分支,切换至新分支,并与远程分支关联
git checkout -b dev origin/dev
# 重命名本地分支
git branch -m name newName
# 删除已经合并的分支,未合并的分支删除不了
git branch -d dev
# 强力删除分支,会丢掉未合并的内容
git branch -D dev
# 删除远程分支
git push origin --delete
7、tag 管理
命令:
# 查看所有标签名称
$ 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
8、fork
8.1 fork 分支到新的仓库
# 创建 git_demo02 文件夹并进入;在 github 创建一个新的仓库
$ mkdir git_demo02
$ cd git_demo02
$ git init
Initialized empty Git repository in /Users/x5456/Desktop/git_demo02/.git/
# 添加源远程仓库和目标远程仓库的信息
$ git remote add src https://github.com/x54256/git_demo01.git
$ git remote add origin https://github.com/x54256/git_demo02.git
# 拉取源仓库需要 fork 的分支的信息
$ git fetch src dev
remote: Enumerating objects: 14, done.
remote: Counting objects: 100% (14/14), done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 14 (delta 2), reused 13 (delta 1), pack-reused 0
Unpacking objects: 100% (14/14), done.
From https://github.com/x54256/git_demo01
* branch dev -> FETCH_HEAD
* [new branch] dev -> src/dev
# 查看所有的分支
$ git branch -a
remotes/src/dev
# 创建本地分支 dev,关联远程分支 src/dev,切换到本地分支 dev
$ git checkout -b dev src/dev
Branch 'dev' set up to track remote branch 'dev' from 'src'.
Switched to a new branch 'dev'
# 拉取目标仓库的信息
$ git fetch origin
# 推送本地分支到目标远程分支,并关联远程分支;其中,第一个 dev 为本地分支名,第二个 dev 为远程分支名
$ git push origin dev:dev
Enumerating objects: 14, done.
Counting objects: 100% (14/14), done.
Delta compression using up to 8 threads
Compressing objects: 100% (9/9), done.
Writing objects: 100% (14/14), 1.27 KiB | 1.27 MiB/s, done.
Total 14 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), done.
To https://github.com/x54256/git_demo02.git
* [new branch] dev -> dev
8.2 fork tag 到新的仓库
# 创建 git_demo03 文件夹并进入;在 github 创建一个新的仓库
$ mkdir git_demo03
$ cd git_demo03
$ git init
Initialized empty Git repository in /Users/x5456/Desktop/git_demo03/.git/
# 添加源远程仓库和目标远程仓库的信息
$ git remote add src https://github.com/x54256/git_demo01.git
$ git remote add origin https://github.com/x54256/git_demo03.git
# 拉取源仓库的信息
$ git fetch src
remote: Enumerating objects: 17, done.
remote: Counting objects: 100% (17/17), done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 17 (delta 3), reused 15 (delta 1), pack-reused 0
Unpacking objects: 100% (17/17), done.
From https://github.com/x54256/git_demo01
* [new branch] dev -> src/dev
* [new branch] master -> src/master
* [new tag] tag1 -> tag1
# 拉取目标仓库的信息
$ git fetch origin
# 将源仓库的 tag1 推送到目标仓库
$ git push origin tag1
Enumerating objects: 11, done.
Counting objects: 100% (11/11), done.
Delta compression using up to 8 threads
Compressing objects: 100% (7/7), done.
Writing objects: 100% (11/11), 1.03 KiB | 1.03 MiB/s, done.
Total 11 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), done.
To https://github.com/x54256/git_demo03.git
* [new tag] tag1 -> tag1
# 下面的操作可选
# 以 tag1 代码来创建本地分支 tag1并切换到本地分支 tag1
$ git checkout -b dev-tag tag1
Switched to a new branch 'dev-tag'
# 推送本地分支到目标远程分支,并关联远程分支;其中,第一个 dev-tag 为本地分支名,第二个 dev-tag 为远程分支名
$ git push origin dev-tag:dev-tag
8.3 fork 某些 commit(cherry-pick)
命令:
git cherry-pick commit_id
命令示例:
# clone demo04 仓库,并进入文件夹
$ git clone https://github.com/x54256/git_demo04.git
Cloning into 'git_demo04'...
remote: Enumerating objects: 17, done.
remote: Counting objects: 100% (17/17), done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 17 (delta 3), reused 16 (delta 2), pack-reused 0
Unpacking objects: 100% (17/17), done.
$ cd git_demo04
# 新增文件 demo04.txt 并提交到本地仓库
$ ls
2.txt 3.txt demo02.txt dev1.txt
$ echo "demo04第一次提交" >> demo04.txt
$ git add demo04.txt
$ git commit -m "demo04第一次提交"
[master fe9c76a] demo04第一次提交
1 file changed, 1 insertion(+)
create mode 100644 demo04.txt
$ git log --oneline
fe9c76a (HEAD -> master) demo04第一次提交
166aacf (origin/master, origin/HEAD) demo02
3c199c9 dev 分支第一次提交
6a6d51f (tag: tag1) Revert "提交第一个需求"
6db2d6f 第 三次提交
aae30ef 第二次提交
37c54c5 提交第一个需求
# 添加第二个远程仓库地址 demo01
$ git remote -v
origin https://github.com/x54256/git_demo04.git (fetch)
origin https://github.com/x54256/git_demo04.git (push)
$ git remote add demo01 https://github.com/x54256/git_demo01.git
$ git branch -vv
* master fe9c76a [origin/master: ahead 1] demo04第一次提交
$ git checkout -b demo01_master demo01/master
fatal: 'demo01/master' is not a commit and a branch 'demo01_master' cannot be created from it
# 拉取 demo01的 master 分支信息,并在本地创建关联分支 demo01_master
$ git fetch demo01 master
From https://github.com/x54256/git_demo01
* branch master -> FETCH_HEAD
* [new branch] master -> demo01/master
$ git checkout -b demo01_master demo01/master
Branch 'demo01_master' set up to track remote branch 'master' from 'demo01'.
Switched to a new branch 'demo01_master'
# 查看 demo01_master 的文件和提交日志
$ ls
2.txt 3.txt
$ git log --oneline
6a6d51f (HEAD -> demo01_master, tag: tag1, demo01/master) Revert "提交第一个需求"
6db2d6f 第 三次提交
aae30ef 第二次提交
37c54c5 提交第一个需求
# cherry-pick 本地 master 分支的提交
$ git cherry-pick fe9c76a
[demo01_master ace18d3] demo04第一次提交
Date: Thu Feb 4 08:34:39 2021 +0800
1 file changed, 1 insertion(+)
create mode 100644 demo04.txt
# 查看 demo01_master 的文件和提交日志,发现已经有了新增的文件和提交记录了
$ ls
2.txt 3.txt demo04.txt
$ git log --oneline
ace18d3 (HEAD -> demo01_master) demo04第一次提交
6a6d51f (tag: tag1, demo01/master) Revert "提交第一个需求"
6db2d6f 第 三次提交
aae30ef 第二次提交
37c54c5 提交第一个需求
8.4 fork 某个文件
# 到 master 分支,我们想把 demo02.txt fork 到 demo01_master 分支上
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
$ ls
2.txt 3.txt demo02.txt demo04.txt dev1.txt
# 到 demo01_master 分支,fork master 分支的 demo02.txt
$ git checkout demo01_master
Switched to branch 'demo01_master'
Your branch is ahead of 'demo01/master' by 1 commit.
(use "git push" to publish your local commits)
$ ls
2.txt 3.txt demo04.txt
$ git checkout master demo02.txt
Updated 1 path from d0d9000
$ ls
2.txt 3.txt demo02.txt demo04.txt
# 查看暂存区的状态,我们发现他自动帮我们放进了暂存区中
$ git status
On branch demo01_master
Your branch is ahead of 'demo01/master' by 1 commit.
(use "git push" to publish your local commits)
Changes to be committed:
(use "git reset HEAD ..." to unstage)
new file: demo02.txt # 绿色的
9、使用技巧
9.1 暂存更改
# 保存当前工作进度,会把暂存区和工作区的改动保存起来。执行完这个命令后,在运行git status命令,就会发现当前是一个干净的工作区,没有任何改动。使用git stash save 'message...'可以添加一些注释
git stash
# 显示保存进度的列表。也就意味着,git stash命令可以多次执行。
git stash list
# 恢复最新的进度到工作区。git默认会把工作区和暂存区的改动都恢复到工作区。通过git stash pop命令恢复进度后,会删除当前进度。
git stash pop
# 恢复最新的进度到工作区和暂存区。(尝试将原来暂存区的改动还恢复到暂存区)
git stash pop --index
# 恢复指定的进度到工作区。stash_id是通过git stash list命令得到的
git stash pop stash@{1}
# 除了不删除恢复的进度之外,其余和git stash pop 命令一样。
git stash apply [–index] [stash_id]
# 删除一个存储的进度。如果不指定stash_id,则默认删除最新的存储进度。
git stash drop [stash_id]
# 删除所有存储的进度。
git stash clear
9.2 git commit --amend
上面这条命令会将最后一次的提交信息载入到编辑器中供你修改。 当保存并关闭编辑器后,编辑器会将更新后的提交信息写入新提交中,它会成为新的最后一次提交。
另一方面,如果你想要修改最后一次提交的实际内容,那么流程很相似:首先作出你想要补上的修改, 暂存它们,然后用 git commit --amend 以新的改进后的提交来 替换掉旧有的最后一次提交。
# 修改提交内容示例
$ git status
On branch demo01_master
Your branch is ahead of 'demo01/master' by 1 commit.
(use "git push" to publish your local commits)
Changes to be committed:
(use "git reset HEAD ..." to unstage)
deleted: demo04.txt
$ git commit --amend
[demo01_master 92e1c77] demo04第一次提交 使用 amend 命令修改
Date: Thu Feb 4 08:34:39 2021 +0800
2 files changed, 2 insertions(+)
create mode 100644 demo02.txt
create mode 100644 dev1.txt
$ git status
On branch demo01_master
Your branch is ahead of 'demo01/master' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
9.3 git merge --no-ff
git merge –no-ff 可以保存你之前的分支历史。能够更好的查看 merge历史,以及branch 状态。
git merge 则不会显示 feature,只保留单条分支记录。
9.4 git reflog
查看提交记录的命令是git log,而git reflog的功能是查看本地操作记录,如此一来可以看到本地的commit, merge, rebase等操作记录。
9.5 rebase
https://www.jikewenku.com/10116.html