开源中国

我们不支持 IE 10 及以下版本浏览器

It appears you’re using an unsupported browser

为了获得更好的浏览体验,我们强烈建议您使用较新版本的 Chrome、 Firefox、 Safari 等,或者升级到最新版本的IE浏览器。 如果您使用的是 IE 11 或以上版本,请关闭“兼容性视图”。
Git 技巧:恢复到前一次提交 - 技术翻译 - 开源中国社区

Git 技巧:恢复到前一次提交 【已翻译100%】

标签: Git
oschina 推荐于 4年前 (共 2 段, 翻译完成于 03-05) 评论 20
收藏  
112
推荐标签: Git 待读

有时候你希望将你现在的代码返回到前一次提交,并保留所有之前的变化。你希望在前一次提交与当前HEAD之间提交新的代码。

首先,以你希望退回的提交处新建一个分支为 'revert-branch' 。在这个例子中,我们希望退回到前一次提交(假设当前分支为'master'),并且在这个提交上再做修改。

git branch revert-branch HEAD^

接下来切换到新的分支:

git checkout revert-branch

超级小胖
 翻译得不错哦!

传授一个绝招:从master软恢复到新分支的HEAD。软恢复将改变HEAD的状态,但并不影响工作树。

git reset --soft master

现在,我们执行 git status, 我们将看到我们想要恢复的提交的变化。我要撤销添加'second.txt',但也可能是更复杂的变化:

$ git status
# On branch revert-branch
# Changes to be committed:
#   (use  to unstage)
#
#       deleted:    second.txt
#

现在让我们提交这个 'reversal':

git commit -m "reverted to initial state."


超级小胖
 翻译得不错哦!
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们
评论(20)
Ctrl/CMD+Enter

git branch revert-branch HEAD^
这里的HEAD^不明白。。
git reset --soft master
这里的soft什么作用??
soft: Does not touch the index file nor the working tree at all (but
resets the head to <commit>, just like all modes do). This
leaves all your changed files "Changes to be committed", as git
status would put it.
为什么不用 git reset --hard HEAD~1 呢 ?
没有看懂revert-branch和master是如何关联的。git reset --soft master这里会用新分支的header吗?

引用来自“abel533”的评论

git branch revert-branch HEAD^
这里的HEAD^不明白。。
git reset --soft master
这里的soft什么作用??

HEAD^,就是上一个HEAD
小胖威武
公司最近换Git 了 哈哈
如果不用--hard ,git reset 的作用就是回退数据记录,但是源文件的修改并不回退,是经常用于提交冲突时的措施
~~~~~~~~~~~~~~~
我用Netbeans操作git,特别简单
兄弟,你真该好好看看git权威指南,或者 pro-git,看了绝对不后悔

引用来自“舍得333”的评论

兄弟,你真该好好看看git权威指南,或者 pro-git,看了绝对不后悔

看过,由于工作中用的很少,自己平时用git很少遇到复杂情况。。所以到最后就记住了一些基础的命令。。
需要再复习一遍了。
太浅
git reset --hard HEAD~1
git push origin branch-name --force | git branch new-branch
这个如何?

引用来自“abel533”的评论

引用来自“舍得333”的评论

兄弟,你真该好好看看git权威指南,或者 pro-git,看了绝对不后悔

看过,由于工作中用的很少,自己平时用git很少遇到复杂情况。。所以到最后就记住了一些基础的命令。。

看看git,了解了解它的实现原理和思路,很有益处的。知其然,更要知其所以然。

引用来自“舍得333”的评论

引用来自“abel533”的评论

引用来自“舍得333”的评论

兄弟,你真该好好看看git权威指南,或者 pro-git,看了绝对不后悔

看过,由于工作中用的很少,自己平时用git很少遇到复杂情况。。所以到最后就记住了一些基础的命令。。

看看git,了解了解它的实现原理和思路,很有益处的。知其然,更要知其所以然。

这都能碰上你。我在WC :)
HEAD是project唯一的对吧,head是每个branch的头对吧.
那么,git reset --soft master, 这句将HEAD指向了master的head
那么当前revert-branch的head是否会移动位置和master指在一起了呢???

git reset --soft master仅仅移动HEAD吗?当前分支的head会不会移动呢?(注意我的大小写区分)
谢谢!

引用来自“cyper”的评论

HEAD是project唯一的对吧,head是每个branch的头对吧.
那么,git reset --soft master, 这句将HEAD指向了master的head
那么当前revert-branch的head是否会移动位置和master指在一起了呢???

git reset --soft master仅仅移动HEAD吗?当前分支的head会不会移动呢?(注意我的大小写区分)
谢谢!

我做了一下试验,结果是git reset --soft master不仅会移动HEAD,同时会移动当前branch的head,总算明白了.

引用来自“cyper”的评论

HEAD是project唯一的对吧,head是每个branch的头对吧.
那么,git reset --soft master, 这句将HEAD指向了master的head
那么当前revert-branch的head是否会移动位置和master指在一起了呢???

git reset --soft master仅仅移动HEAD吗?当前分支的head会不会移动呢?(注意我的大小写区分)
谢谢!

您对于HEAD的理解有些许偏差,HEAD指的是当前分支的头。并没有head这个概念。head的写法也只是有时候懒得按shift造成的。
顶部