Git撤销提交

本文连接:http://volnet.github.io/#!docs/git/reset-to-old-version.mdgit

在使用Git进行版本管理的时候,常常会遇到一些错误的提交。github

在开始演示以前,咱们先创建一个测试的环境。服务器

mkdir gittest
cd gittest
git init

echo "a" >> a.md
git add .
git commit -m "add a.md"

echo "b" >> b.md
git add .
git commit -m "add b.md"

echo "c" >> c.md
git add .
git commit -m "add c.md"

rm -rf a.md
git add .
git commit -m "remove a.md"

git remote add origin http://gitserver-url

 

方法一:git revert(推荐)

推荐理由:git revert将保留commit历史。假设有a、b、c三次顺序提交,那么假设被回滚到a,则b、c仍然存在,同时会多出d。
 
git log --oneline

931568f remove a.md
f622cef add c.md
2a0c5a9 add b.md
6fbba34 add a.md

# 假设要回到2a0c5a9

git revert -n 2a0c5a9..931568f

# ls能够看到工做目录中的文件已经恢复到当时的状态,这个时候查询git status将看到 2a0c5a9 commit前的状态。

# 这时候须要从新提交文件

git commit -m "revert 2a0c5a9..931568f and recommit"

git push

 

方法二:git reset --hard(不推荐)

 

不推荐理由:git reset将使历史没法恢复。假设有a、b、c三次顺序提交,那么假设被回滚到a,则b、c将不复存在。
 
git log --oneline 

931568f remove a.md
f622cef add c.md
2a0c5a9 add b.md
6fbba34 add a.md

# 假设咱们要恢复到2a0c5a9,则能够

git reset --hard 2a0c5a9

# 此时ls你将看到a.md

git push -f

#这里须要增长-f或者--force命令,缘由当前的HEAD指针指向了一个旧版本,而服务器上这个版本不是最新版本。其实服务器并不知道你是使用reset命令获得的旧版本,觉得你是一个长期没有获取最新版本的用户,提交了一个错误的版本。所以它会建议你git pull以后再更新。若是你很是明确你要这么作,而且不关心你目标版本以后的版本(可能包含别人的提交),你大能够就此使用-f来强制提交。同时你将得到一个干净的历史,就像什么都没有发生过同样。
相关文章
相关标签/搜索