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  
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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容