@qidiandasheng
2020-12-10T15:44:43.000000Z
字数 2484
阅读 1679
使用工具
这里指未commit的文件
git checkout -- <file>
git clean -xdf
or
git checkout .
找到上次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
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
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 status 只能查看未传送提交的次数
git cherry -v 只能查看未传送提交的描述/说明
git log master ^origin/master 则可以查看未传送提交的详细信息
https协议push的时候需要输入用户名和密码问题:
git config --global credential.helper store
然后你会在你本地生成一个文本,上边记录你的账号和密码。
errno 56,那么应该是有大文件或者提交缓存方面的问题。而 errno 54 则不是这个问题。对于 56 错误的解决方式与网络上大部分文章的一致。都是增大缓存配置,比如下面就是配置提交缓存为 500M。
git config http.postBuffer 524288000
git config https.postBuffer 524288000