git回滚

目录

转自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  

  • 完成Commit命令的撤销,但是不对代码修改进行撤销,可以直接通过git reset commit_id 重新提交对本地代码的修改。 如上一个例子中就是:
 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

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦