总结Git 不同情况下撤销和如何回滚

时间: 2019-03-02阅读: 415标签: git

撤销

在未进行git push前的所有操作,都是在“本地仓库”中执行的。我们暂且将“本地仓库”的代码还原操作叫做“撤销”


情况一:文件被修改了,但未执行git add操作(working tree内撤销) (modify file) <==> git checkout <filename>/.

git checkout fileName
git checkout .


情况二:同时对多个文件执行了git add操作,但本次只想提交其中一部分文件 git add <==> git reset HEAD <filename>

$ git add *
$ git status
# 取消暂存
$ git reset HEAD <filename>


情况三:文件执行了git add操作,但想撤销对其的修改(index内回滚) (modify file and add) <==> git reset HEAD <filename> && git checkout <filename>

# 取消暂存
git reset HEAD fileName
# 撤销修改
git checkout fileName


情况四:修改的文件已被git commit,但想再次修改不再产生新的Commit git commit <==> git commit --amend -m 'msg'

# 修改最后一次提交 
$ git add sample.txt
$ git commit --amend -m"说明"


情况五:已在本地进行了多次git commit操作,现在想撤销到其中某次Commit (git multiple commit) <==> git git reset [--hard|soft|mixed|merge|keep] [commit|HEAD]

一般使用 --soft

git reset [--hard|soft|mixed|merge|keep] [commit|HEAD]


回滚

上述场景二,已进行git push,即已推送到“远程仓库”中。我们将已被提交到“远程仓库”的代码还原操作叫做“回滚”!注意:对远程仓库做回滚操作是有风险的,需提前做好备份和通知其他团队成员!


情况一:切换到 tag 或 branch

如果你每次更新线上,都会打tag,那恭喜你,你可以很快的处理上述场景二的情况 git tag <==> git checkout <tag>

git checkout <tag>

如果你回到当前HEAD指向 (git current HEAD) <==> git checkout <branch_name>

git checkout <branch_name>


情况二:撤销指定文件到指定版本 (git file in history) <==> git checkout <commitID> <filename>

# 查看指定文件的历史版本
git log <filename>
# 回滚到指定commitID
git checkout <commitID> <filename>


情况三:删除最后一次远程提交 git revert HEAD || git reset --hard HEAD^

方式一:使用revert 会有新的 commit 记录

git revert HEAD
git push origin master

方式二:使用reset 不会产生新的 commit 记录

git reset --hard HEAD^
git push origin master -f

二者区别:

  • revert是放弃指定提交的修改,但是会生成一次新的提交,需要填写提交注释,以前的历史记录都在;
  • reset是指将HEAD指针指到指定提交,历史记录中不会出现放弃的提交记录。


情况四:回滚某次提交 (git commit in history) <==> git revert <commitID>

# 找到要回滚的commitID
git log
git revert commitID

同样的,revert 会出现一次新的 commit 提交记录,这里也可以使用 reset


删除

删除某次提交 (git commit in history) <==> git rebase -i <commitID>

git log --oneline -n5

git rebase -i <commit id>^

注意:需要注意最后的_^_号,意思是commit id的前一次提交

git rebase -i "5b3ba7a"^

在编辑框中删除相关commit,如pick 5b3ba7a test2,然后保存退出(如果遇到_冲突_需要先解决_冲突_)!

git push origin master -f

通过上述操作,如果你想对历史多个commit进行处理或者,可以选择git rebase -i,只需删除对应的记录就好。rebase还可对 commit 消息进行编辑,以及合并多个commit。

转自:https://blog.csdn.net/ligang2...


吐血推荐

1.站长广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入...

2.休闲娱乐: 直播/交友    优惠券领取   网页游戏   H5游戏

链接: http://www.fly63.com/article/detial/2176

如何在Git提交大小写敏感的文件

大意是说, 忽略大小写敏感是为了在不同的文件系统上更好的工作。比如APFS,HFS +,FAT,NTFS等。例如,如果在目录列表里, Git期望找到一个文件叫Makefile,却找到了makefile,这时候,Git就假定它是同一文件,并继续将其记住为Makefile。

git 高级用法小抄

如果你觉得 git 很迷惑人,那么这份小抄正是为你准备的!请注意我有意跳过了 git commit、git pull/push 之类的基本命令,这份小抄的主题是 git 的一些「高级」用法

git使用中的“冲突”

在git使用中,尤其是多人维护相同项目时,“冲突”是一个经常要解决的问题,但是对这个问题似乎一直似懂非懂。现在感觉真的想明白了,这里把它从发生到处理整个机制做个描述。

如何撤销 Git 操作?

Git 版本管理时,往往需要撤销某些操作。本文介绍几种最主要的情况,给出详细的解释。更多的命令可以参考《常用 Git 命令清单》一文。

使用 Git 来管理 Git 服务器

这涉及除日常使用 Git 之外的许多组件,其中最重要的是 Gitolite,该后端应用程序可以管理你使用 Git 的每个细微的配置。Gitolite 的优点在于,由于它使用 Git 作为其前端接口,因此很容易将 Git 服务器管理集成到其他基于 Git 的工作流中

当我们git merge的时候到底在merge什么?

用git add、git commit、git branch等命令的时候,Git在背后究竟做了什么,我是答不上来的。好在互联网上有许多这方面的资料可供学习,现在,我试着循序渐进地讲解一遍吧。

通过 41 个 问答方式快速了解学习 Git

个人比较喜欢 git add -p. 这增加了“补丁模式”的变化,这是一个内置的命令行程序。它遍历了每个更改,并要求确认是否要执行它们。这个命令迫使咱们放慢速度并检查更改文件。作为开发人员,咱们有时常常急于提交

vscode git 全局忽略文件和文件夹

windows 中先在当前用户根目录下创建一个全局要忽略的文件列表.gitignore_global,window下 只有扩展名的文件不让保存,可以在 git bash中创建文件;二、 然后在命令行下执行下面git 命令

git全局忽略设置和.gitignore

在使用git过程中,希望git忽略某些特殊文件或文件夹,避免提交例如.DS_Store等等。先来查看一下git状态:如果只是这一个项目中有部分不需要提交的内容,那么直接在项目最外层创建一个.gitignore

Git忽略文件不起作用的解决方法

开发过程中,我们自己会在gitignore 文件中添加一些忽略项,然而,每次使用git status 的时候都未列在 untracked里面,比如 用IDEA 开发,.idea 文件夹添加到该文件,再提交还是会提示。

fly63.com版权所有,内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权,请与小编联系!情况属实本人将予以删除!

文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全