git 的错误操作,导致丢失了重要的commit,真是痛不欲生;
最后通过git神器终于找回了丢失的commit,但是需要总结和反思的地方有一些,同时需要加深git的学习,特献上本文以供参考
执行git reset --hard HEAD~1 ,删除了commit3,但是发现reset错了,晕菜了……
还好有后悔药(感叹git的强大啊,神马意外情况都考虑到了)满血恢复commit3,执行如下步骤:
git reflog
502dd0f HEAD@{0}: HEAD~1: updating HEAD
147b3b5 HEAD@{1}: commit: test3
502dd0f HEAD@{2}: commit: test2
0692c03 HEAD@{3}: commit (initial): test1
git reset --hard 502dd0f
git cherry-pick 147b3b5
丢失的commit3终于回来啦~~~~
虽然有利器,但是需要总结和反思的是,慎用reset hard啊,实在不行reset merge也是不错的选择。
===================================================
通过这次错误的使用reset,反思需要加强对reset的了解,不能再盲目的使用了
git reset [--hard|soft|mixed|merge|keep] [<commit>或HEAD]
作用:将当前分支reset到指定的<commit>或者HEAD(默认为最新的一次提交,即重设到最新一次提交之前的版本)
备注:
index,执行git add的操作,会对文件创建索引,所有被跟踪的文件索引会放入index,表示文件被修改待提交
working tree,当前工作区,被修改但未被add的文件,存储在工作区
ORIG_HEAD,用于指向前一个操作状态,每次的commit或者pull或者reset,git 都会把老的HEAD拷贝到.git/ORIG_HEAD,通过对ORIG_HEAD的引用可 以指向前一次的操作状态
1、hard(慎用)
重设index和working tree,所有改变都会被丢弃,包括文件的修改、新增、删除等操作,并把HEAD指向<commit>,
因此通过git log查看版本提交记录,被reset的版本记录会被丢弃,但可以通过git reflog查看
2、soft
不重设index和working tree,仅仅将HEAD指向<commit>,表示已经commit的文件会取消commit,
通过git status查看,文件会处于待commit状态“Changes to be committed”
3、mixed(默认)
重设index,但不重设working tree,表示已经被add的文件,被取消add,
通过git status查看,文件会处于待添加索引状态 “Changes not staged for commit”
4、merge
重设index,重设working tree中发生变化的文件,但是保留index和working tree不一致的文件
5、keep
重设index,重设working tree中发生变化的文件
分享到:
相关推荐
$ git cherry-pick commit1 commit2 commit3 ... commitN (1) 每个提交都引用一个 SHA-1 哈希值。 请注意,在命令中只给出哈希值的前七个字符(即ab8s001 )是合理的。 如果您的cherry-pick 命令在复制命令中指定...
主要介绍了git 一个可以提高开发效率的命令:cherry-pick,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
cherry-pick : 精心挑选,挑选一个我们需要的 commit 进行操作。它可以用于将在==其他分支==上的 commit 移植到==当前的分支==。
maven git commit id plugin git-commit-id-plugin is a plugin quite similar to ...
需要被合并的commit信息,将pick命令改为 s 命令,将s合并到pick上,时间上是s向更早的pick上合并;ESC 输入 :wq 回车 弹出信息,ESC 输入 :wq 回车 打印出成功 git log oneline -n,查看n条log信息,已修改
Windows Git 2.10.2 64-bit
git下载,上传百度云吧
git commit id插件与https://fisheye.codehaus.org/browse/mojo/tags/buildNumber-maven-plugin-1.0-beta-4非常相似,但是作为buildNumber,在我启动这个插件时,它只支持cvs和svn,必须做些什么。
欢迎来到git-commit-msg-linter :waving_hand: :eyes: 立即查看您的每条git commit消息 :rocket: 。 一个git“ commit-msg”挂钩,用于根据流行的来替换您的git commit消息。 作为一个挂钩,它将在每次提交时运行...
CREATE Clone an existing repository ...$ git commit -a Commit previously staged changes $ git commit Change the last commit Don‘t amend published commits! $ git commit --amend 。。。等更多内容
验证Git提交消息 根据各种预设验证提交消息安装yarn add validate-git-commit-msg -D特征即使还有其他一些程序包也可以执行此操作,但该程序包的生活质量却发生了一些变化。 让您决定如何验证提交消息(请参阅) 它...
樱桃采摘 一个Vue.js项目,用于在类(或任何其他方案)上绘制...git clone https://github.com/BirkhoffLee/cherry-pick cd cherry-pick chmod +x ./build.sh ./build.sh docker-compose up -d docker-compose logs -f
前端开源库-git-pre-commitGit预提交,您可以使用任何构建工具(gulp、grunt等)运行预提交,它将忽略所有
git-guppy-pre-commit-hook Git Guppy 的 Git 预提交钩子,一个简单的 git-hook 集成,用于您的 gulp 工作流程。 去安装“git-guppy”,这是核心模块! Git 文档 有关此钩子的详细信息 安装 使用安装: $ npm ...
git-absorb:git commit --fixup,但是自动
极简主义的CLI工具,可以自动执行git add X git commit -m 'Y(Z): W' -m'Y git commit -m 'Y(Z): W'工作流,帮助您快速轻松地编写。 安装 注意:> = 7的NPM版本可能需要npm install --legacy-peer-deps直到。 npm ...
如何安装要安装钩子,请将预提交的文件复制到您的项目.git / hooks / pre-commit中: $ cp pre-commit .git / hooks / pre-commit; $ chmod + x .git / hooks / pre-commit; 该钩子带有“ die”,“ print_r”和“ ...
git-commit-autouser git-commit-autouser 自动设置提交者和作者的姓名和电子邮件。 名称和电子邮件由远程源的 url 确定。 安装 $ gem install git-commit-autouser 用法 将以下设置添加到 .gitconfig: ...
git commit id插件与https://fisheye.codehaus.org/browse/mojo/tags/buildNumber-maven-plugin-1.0-beta-4非常相似,但是作为buildNumber,在我启动这个插件时,它只支持cvs和svn,必须做些什么。
在日常的开发中,目前主流的代码管理工具就是 git 了,当我们对代码进行改动了,首先得git commit提交到本地仓库,git 规定了提交时必须填写提交信息作为改动说明,保存 commit 历史中,可以找到历史代码,也方便他人 ...