美文网首页
git -- (实用)对工作区和暂存区的一些操作场景

git -- (实用)对工作区和暂存区的一些操作场景

作者: 我要进大厂 | 来源:发表于2020-02-01 22:43 被阅读0次

    diff差异

    工作区和暂存区 :  git diff 
    
    工作区和HEAD  :  git diff  HEAD
    
    暂存区和HEAD  :  git diff  --cached
    
    不同分支的差异 :  git diff  dev1.0  master
    
    不同commit的差异:git diff  sha1 sha2
    
    指定文件: git diff sha1 sha2 -- test/ab.txt
    

    说明:对于新增的文件,其只存在于工作区,且处于 Untracked 状态,Git 认为无论是哪两个 Git 区域之间的比对都没有意义,得到的结果是没有区别。使用git status查看;

    撤销操作

    本地仓库恢复暂存区内容 :
    git reset HEAD -- 文件名   # 对某个文件进行恢复                    
    git reset HEAD -- path    # 对某个路径进行恢复    
    git reset HEAD            # 对所有文件进行恢复
    (使用 git diff -cached 做比较)
     
    暂存区恢复工作区内容 :  
    git checkout -- 文件名     # 对某个文件进行恢复
    git checkout -- path      # 对某个路径进行恢复 
    git checkout              # 对所有文件进行恢复
    (使用 git diff 做比较)
    
    本地仓库恢复工作区和暂存区内容 :
    git reset --hard HEAD
    (使用 git diff HEAD 工作区和本地仓库做比较)
                  
    git reset HEAD 本地仓库对暂存区的恢复,加了--hard,对工作区也一起恢复。        
    

    回到某个commit有两种方式:reset和revert(恢复)

    git reset HEAD
    git reset commit_id
    
    git revert HEAD
    git revert -n commit_id    -n 表示不立即commit,只是恢复工作区内容。
    

    git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。

    清除工作区变化

    git reset --hard HEAD
    git clean -df
    

    清除暂存区变化

    git rm -r --cached .
    git rm -r --cached -- index.jsp
    

    从工作目录中删除所有没有tracked过的文件和目录-d

    git clean -df 
    

    说明:git clean经常和git reset --hard一起结合使用. 记住reset只影响被track过的文件, 所以需要clean来删除没有track过的文件. 结合使用这两个命令能让你的工作目录完全回到一个指定的<commit>的状态
    git clean的用法


    下面转发文件转发自:https://www.cnblogs.com/soaeon/p/10908712.html

    比较暂存区和HEAD所含文件的差异?

    操作场景如下:

    *   修改readme.md 文档
        *   vi readme.md
    *   加入到暂存区域
         *   git add readme.md
    *   使用git diff -cached 做比较
    

    比较工作区和暂存区所含文件的差异?

    操作场景如下:

    *   修改readme.md 文档
        *   vi readme.md
    *   加入到暂存区域
        *   git add readme.md
    *   使用git diff 做比较
    

    让暂存区恢复成和HEAD的一样?

    git reset HEAD
    

    暂存区覆盖工作区(将工作区的修改抹掉)

    操作场景如下:

    *   修改 re'adme.md
        *   vi readme.md
    *   比较工作区和暂存区的问价差异
        *   git diff
    *   将暂存区覆盖工作区
        *   git checkout -- readme.md
    *   再次比较工作区和暂存区的差异
        *   git diff
    

    取消暂存区部分文件的更改?

    操作场景如下:

    创建了两个文件, 同时加入到了暂存区域, 发现还需要修改

    soaeon@DESKTOP-FUJJTHR MINGW64 /f/gitstudy (master)
    $ git status
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
            new file:   index.css
            new file:   index.js
    
    

    index.css已经加入到暂存区域了, 但是还需要修改, 我们先从暂存区域撤回吧

    soaeon@DESKTOP-FUJJTHR MINGW64 /f/gitstudy (master)
    $ git reset HEAD   index.css
    
    

    执行git status 查看一下是否退回来了

    soaeon@DESKTOP-FUJJTHR MINGW64 /f/gitstudy (master)
    $ git status
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
            new file:   index.js
    
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
    
            index.css
    

    再比较一下工作区和暂存区的差别

    soaeon@DESKTOP-FUJJTHR MINGW64 /f/gitstudy (master)
    $ git diff --cached
    diff --git a/index.js b/index.js
    new file mode 100644
    index 0000000..e69de29
    

    相关文章

      网友评论

          本文标题:git -- (实用)对工作区和暂存区的一些操作场景

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