美文网首页
git 常用命令

git 常用命令

作者: 想54256 | 来源:发表于2021-02-04 09:54 被阅读0次

    title: git 常用命令
    date: 2021/02/03 10:39


    1、配置用户信息(git config 命令)

    # 配置git用户名:随便起,最好好写成自己的拼音名字,这样提交代码到远程仓库,别人知道是你提交的
    $ git config --global user.name "yujx"
    
    # 配置git邮箱:邮箱格式要对,不要求邮箱是真的
    $ git config --global user.email "yujx@dist.com.cn"
    
    # 查询所有的配置项
    $ 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 <file>..." 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 <file>..." 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)
      # 所以这个命令的意思是,将 <file> 重置到当前 HEAD 指向的 commit 的样子,以撤销你对他的更改。但执行这个命令只会将这个修改从暂存区移除,文件在工作区还是处于删除状态的。
      # 如果想要恢复文件,可以再执行 git checkout [HEAD] -- 1.txt 进行恢复文件
      # reset 命令后面会详细的讲。
      (use "git reset HEAD <file>..." 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 <name> 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 将暂存区和工作区恢复为【指定提交】的样子,注意:任何本地变更都会丢失

    <img src="https://tva1.sinaimg.cn/large/008eGmZEgy1gn8yerdu55j30m80g2gob.jpg" style="zoom:50%;" />

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

    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 <file>..." 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 <file>..." to update what will be committed)
      (use "git checkout -- <file>..." 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 <file>..." 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 <name>           
    
    # 已经合并的分支列表,git branch -d 可删除成功
    git branch --merged     
    # 未合并的分支列表,删除不成功,-D 选项强制删除它     
    git branch --no-merged 
    
    # 创建新分支
    git branch <name>               
    # 切换到指定分支 
    git checkout <name>             
    # 从本地已有的当前分支 == 创建新分支 + 切换至新分支 
    git checkout -b <name>          
    # 从远程已有分支创建新分支,切换至新分支,并与远程分支关联 
    git checkout -b dev origin/dev
    
    # 重命名本地分支
    git branch -m name newName
    
    # 删除已经合并的分支,未合并的分支删除不了
    git branch -d dev   
    # 强力删除分支,会丢掉未合并的内容       
    git branch -D dev           
    
    # 删除远程分支
    git push origin --delete <branch-name>  
    

    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 <file>..." 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 <file>..." 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 常用命令

          本文链接:https://www.haomeiwen.com/subject/khzvtltx.html