@qidiandasheng
2020-12-10T07:44:43.000000Z
字数 2484
阅读 2030
使用工具
这里指未commit的文件
git checkout -- <file>
git clean -xdforgit checkout .
找到上次git commit的 id
git log
找到你想撤销的commit_id
比如下面就是我git log输出的最近两次commit,test是已经push到远程仓库的,test1是最新commit但没push的。如果我们想撤销test1这次的提交,则我需要的就是test这次的commit_id。
commit a5febeebf141dbd9a022dfe96a46cad9d474a5adAuthor: zhengqidian <zhengqidian@dasheng.com>Date: Mon Sep 18 23:07:04 2017 +0800test1commit 3a2a9a3f3fd56ec0ebe2ada274d127b3ec9dcb17Author: zhengqidian <zhengqidian@dasheng.com>Date: Mon Sep 18 22:57:47 2017 +0800test
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 a5febeebf141dbd9a022dfe96a46cad9d474a5adAuthor: zhengqidian <zhengqidian@dasheng.com>Date: Mon Sep 18 23:07:04 2017 +0800test1commit 3a2a9a3f3fd56ec0ebe2ada274d127b3ec9dcb17Author: zhengqidian <zhengqidian@dasheng.com>Date: Mon Sep 18 22:57:47 2017 +0800test
git revert a5febeebf141dbd9a022dfe96a46cad9d474a5ad
回滚之后git log如下面所示:
commit b80d6e00853f386159aa4a17ab40d9d375ad71d0Author: zhengqidian <zhengqidian@dasheng.com>Date: Mon Sep 18 23:37:00 2017 +0800Revert "test1"This reverts commit a5febeebf141dbd9a022dfe96a46cad9d474a5ad.commit a5febeebf141dbd9a022dfe96a46cad9d474a5adAuthor: zhengqidian <zhengqidian@dasheng.com>Date: Mon Sep 18 23:07:04 2017 +0800test1commit 3a2a9a3f3fd56ec0ebe2ada274d127b3ec9dcb17Author: zhengqidian <zhengqidian@dasheng.com>Date: Mon Sep 18 22:57:47 2017 +0800test
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 524288000git config https.postBuffer 524288000
