美文网首页
git的回滚相关

git的回滚相关

作者: 不要和哥闹 | 来源:发表于2021-03-25 12:28 被阅读0次

    转自git的使用

    取消修改,恢复版本

    取消对单个文件的修改

    这里指未commit的文件

    git checkout -- <file>
    

    取消所有未提交的修改

    git clean -xdf   
    or
    git checkout .
    

    撤销git commit(未push)

    • 找到上次git commit的 id
      git log
      找到你想撤销的commit_id
      比如下面就是我git log输出的最近两次commit,test是已经push到远程仓库的,test1是最新commit但没push的。如果我们想撤销test1这次的提交,则我需要的就是test这次的commit_id。
    commit a5febeebf141dbd9a022dfe96a46cad9d474a5ad
    Author: zhengqidian <zhengqidian@dasheng.com>
    Date:   Mon Sep 18 23:07:04 2017 +0800
        test1
    commit 3a2a9a3f3fd56ec0ebe2ada274d127b3ec9dcb17
    Author: zhengqidian <zhengqidian@dasheng.com>
    Date:   Mon Sep 18 22:57:47 2017 +0800
        test
    
    • git reset --hard commit_id
      完成撤销,同时将代码恢复到commit_id 对应的版本。
      如上一个例子中就是:
     git reset --hard 3a2a9a3f3fd56ec0ebe2ada274d127b3ec9dcb17  
    git reset commit_id
    
    • 完成Commit命令的撤销,但是不对代码修改进行撤销,可以直接通过git commit 重新提交对本地代码的修改。
      如上一个例子中就是:
     git reset 3a2a9a3f3fd56ec0ebe2ada274d127b3ec9dcb17  
    

    暂存到stash

    git stash
    //恢复
    git stash pop
    

    回滚

    Revert 撤销一个提交的同时会创建一个新的提交。这是一个安全的方法,因为它不会重写提交历史。

    比如下面的这个例子的提交,如果我们不想要test1的这次提交了,上面我说过用git reset --hard test_commit_id,但这是在test1这次提交未push的情况下。
    如果test1这次提交已经push的话就应该使用git revert test1_commit_id,这样的话代码就会把test1这次的代码修改进行撤销并重新生成一次commit,这样的话test1的这次commit还是存在于工作树上的,保持了工作树的干净。

    commit a5febeebf141dbd9a022dfe96a46cad9d474a5ad
    Author: zhengqidian <zhengqidian@dasheng.com>
    Date:   Mon Sep 18 23:07:04 2017 +0800
        test1
    commit 3a2a9a3f3fd56ec0ebe2ada274d127b3ec9dcb17
    Author: zhengqidian <zhengqidian@dasheng.com>
    Date:   Mon Sep 18 22:57:47 2017 +0800
        test
    

    git revert a5febeebf141dbd9a022dfe96a46cad9d474a5ad
    回滚之后git log如下面所示:

    commit b80d6e00853f386159aa4a17ab40d9d375ad71d0
    Author: zhengqidian <zhengqidian@dasheng.com>
    Date:   Mon Sep 18 23:37:00 2017 +0800
        Revert "test1"
        This reverts commit a5febeebf141dbd9a022dfe96a46cad9d474a5ad.
    commit a5febeebf141dbd9a022dfe96a46cad9d474a5ad
    Author: zhengqidian <zhengqidian@dasheng.com>
    Date:   Mon Sep 18 23:07:04 2017 +0800
        test1
    commit 3a2a9a3f3fd56ec0ebe2ada274d127b3ec9dcb17
    Author: zhengqidian <zhengqidian@dasheng.com>
    Date:   Mon Sep 18 22:57:47 2017 +0800
        test
    

    回滚中间很大一部分commit,其中有merge commit

    回滚

    git reset --hard 4
    git reset --soft 8
    git commit -m 'Reverted 5 6 7 8'

    其实楼主怕的是丢失提交记录,而不是使用 reset rebase 命令

    查看当前分支是基于哪个分支创建的

     git reflog show <branchName>
    

    检查本地的代码修改情况

    git diff 可以查看当前没有add 的内容修改(不在缓冲区的文件变化)

    git diff --cached查看已经add但没有commit 的改动(在缓冲区的文件变化)

    git diff HEAD 是上面两条命令的合并

    查看未git push到远程代码库的git commit

    git status 只能查看未传送提交的次数

    git cherry -v 只能查看未传送提交的描述/说明

    git log master ^origin/master 则可以查看未传送提交的详细信息

    输入用户名和密码

    https协议push的时候需要输入用户名和密码问题:

    git config --global credential.helper store
    

    然后你会在你本地生成一个文本,上边记录你的账号和密码。

    pull 或者 push 一个大项目时报错

    errno 56,那么应该是有大文件或者提交缓存方面的问题。而 errno 54 则不是这个问题。对于 56 错误的解决方式与网络上大部分文章的一致。都是增大缓存配置,比如下面就是配置提交缓存为 500M。

    git config http.postBuffer 524288000
    git config https.postBuffer 524288000
    

    相关文章

      网友评论

          本文标题:git的回滚相关

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