git 常用命令


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、本地仓库相关命令

本地仓库分为三部分:工作区,暂存区,仓库区,其中暂存区、仓库区是版本库部分

image

注:图上关于 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]

注:

image

命令释义:将 HEAD 指向我们所选提交。

命令参数:

命令 释义
--mixed(默认) 将暂存区恢复为【指定提交】的样子,当前工作区与【指定提交】不同的地方不放进暂存区。
--soft 将暂存区恢复为【指定提交】的样子,当前工作区与【指定提交】不同的地方放进暂存区。
--hard 将暂存区和工作区恢复为【指定提交】的样子,注意:任何本地变更都会丢失

那么他就可以帮我们做如下几件事:

  1. 丢弃暂存区的修改(可是我为啥要把更改从暂存区移除呢?直接用 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")
  1. 将没有 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
  1. 将工作区恢复成之前的某次提交
# 查看提交记录,一共有三条提交记录
$ 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
  1. 将已经 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) 提交第一个需求
image

reset 原理

image

5、撤销 commit(git revert)

撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程。

image

命令:

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

image

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

你可能感兴趣的:(git 常用命令)