git reset 和 git revert 有啥区别?
Posted
技术标签:
【中文标题】git reset 和 git revert 有啥区别?【英文标题】:What is the difference between git reset and git revert?git reset 和 git revert 有什么区别? 【发布时间】:2015-01-17 21:59:03 【问题描述】:嗨,我是 git 的新手,我不明白 git reset
和 git revert
之间的基本区别是什么。 git revert
是否恢复被推送的合并?
【问题讨论】:
What's the difference between Git Revert, Checkout and Reset?的可能重复 是的,我在这里找到了解决方案,以及在我发布问题后不久您提到的链接 【参考方案1】:git revert:通过创建新的提交来撤消对本地/原始存储库的提交的更改部分。
command: git revert <id>
git reset:Git reset 将删除/撤消在本地 repo 中提交的更改。它通过 3 种方式撤消更改,--soft、--mixed、--hard。其中mixed是默认值。
工作目录(编码)->暂存区(索引)->本地回购(git push)
git reset –soft/mixed/hard –HEAD~N -> mixed is default
git reset --soft HEAD~N # will move file/changes from local commit to staging area
git reset --mixed HEAD~N #will move file/changes from local commit to working directory
git reset --hard HEAD~N #will delete file /changes from working directory
【讨论】:
【参考方案2】:Git reset -->将分支的尖端移动到不同的提交。这可用于从当前分支中删除提交。它通过提交向后移动分支。 Git Revert-->通过创建新提交来撤消提交。这是撤消更改的安全方法,因为它没有机会重写提交历史记录。
【讨论】:
【参考方案3】:据我所知,他们正在做完全不同的事情。
git revert
旨在恢复先前提交的效果。例如,
A <- B <- C
^ HEAD
如果我发现我之前提交的 B 是错误的,并且我想“撤消”它的更改,git-revert
-ing B 将导致:
A <- B <- C <- B'
^ HEAD
B'
正在反转 B 中所做的更改。
git reset
更直接,它只是将 HEAD 设置为某个提交,
A <- B <- C
^ HEAD
git-reset
-ting to B会给你
A <- B <- C
^ HEAD
【讨论】:
如果答案正确且有帮助,请考虑接受。 哦,是的,当然.. 接受 有没有办法用命令行显示“树图”(例如:A @Catbuilts 类似git log --graph
?
除此之外还有什么作用吗?我注意到在不小心将分支 A 合并到分支 B 之后,然后恢复了合并提交,那么就不可能再将 A 合并到 B 中了。但只能通过还原还原提交。以上是关于git reset 和 git revert 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章