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中发生变化的文件
分享到:
相关推荐
例如,如果你有100个commit需要从`commit1`到`commit100`,你可以执行`git cherry-pick commit1..commit100`。但需要注意,`commit1`不会被包含,而`commit100`会被包含。 ### 4. 暂存`cherry-pick` 有时候,你...
git cherry-pick commit1^{commit}..commit2^{commit} ``` 这里,`^{commit}` 表示获取提交的父节点。 ## 三、解决冲突 当 `cherry-pick` 遇到冲突时,Git 会暂停操作,等待你解决冲突。冲突解决后,记得执行 `...
$ git cherry-pick commit1 commit2 commit3 ... commitN (1) 每个提交都引用一个 SHA-1 哈希值。 请注意,在命令中只给出哈希值的前七个字符(即ab8s001 )是合理的。 如果您的cherry-pick 命令在复制命令中指定...
cherry-pick : 精心挑选,挑选一个我们需要的 commit 进行操作。它可以用于将在==其他分支==上的 commit 移植到==当前的分支==。
maven git commit id plugin git-commit-id-plugin is a plugin quite similar to ...
- `git cherry-pick`:从一个分支挑选特定的提交应用到另一个分支。 - `git blame`:查看每一行代码是谁在何时修改的。 6. Git与GitHub、GitLab等平台的结合: - GitHub、GitLab等提供了基于Git的代码托管服务,...
3. **Cherry-pick**:`git cherry-pick`可以将某个特定的提交应用到其他分支,用于共享或复制功能。 4. **Submodule**:Git的子模块功能允许你在项目中嵌入其他Git仓库,便于管理依赖的项目。 以上就是关于Git-...
- 提交更改(`git commit`) - 查看状态(`git status`) - 创建和切换分支(`git branch`和`git checkout`) - 合并分支(`git merge`) - 推送到远程仓库(`git push`) - 从远程仓库拉取更新(`git pull`) 了解...
* cherry-pick 一个 commit:`git fetch ssh://xxx@xxxx/xxx/xxx refs/changes/20/190820/6 && cherry-pick FETCH_HEAD` * 查看当前 commit:`git log` * 修改代码,然后提交到本地:`git add . && git commit --...
4. 命令行工具:Git Bash提供了一个类似于Linux终端的环境,用户可以使用Git命令行工具进行各种操作,如`git clone`、`git add`、`git commit`和`git push`等。 5. 图形界面:除了命令行,Git还提供图形用户界面...
标题中的“前端开源库-git-pre-commit”指的是一个用于前端开发的开源工具,它与Git的预提交钩子(pre-commit hook)相关。Git预提交钩子是在提交代码之前执行的一段脚本,允许开发者在正式提交前进行一些检查或自动...
首先,Git的核心概念包括仓库(Repository)、提交(Commit)、分支(Branch)和合并(Merge)。仓库是Git中存储所有版本历史的地方,而提交则记录每次对代码所做的更改。分支允许开发者在不同的工作线上并行开发,...
5. 高级命令:Git提供了一系列高级命令,如`git rebase`用于整理提交历史,`git cherry-pick`用于选取特定提交应用到其他分支,以及`git bisect`用于快速定位bug。 在Git 2.18.0中,值得注意的新特性和改进包括: ...
- `git commit`:将暂存区的改动提交到本地仓库,附带提交信息。 - `git push`:将本地仓库的改动推送到远程仓库。 - `git pull`:从远程仓库拉取并合并最新的改动到本地。 - `git branch`:查看、创建和删除分支。 ...
在协作环境中,Git的特性如代码审核(`git rebase`和`git cherry-pick`)、分支策略(如特性分支和主分支)以及冲突解决机制,都有助于团队成员有效地协同工作。同时,Git与GitHub、GitLab等平台的结合,提供了代码...
Windows Git 2.10.2 64-bit
3. 提交更改:使用`git commit -m "commit message"`将暂存区的更改保存到仓库,创建一个新的提交。 4. 创建分支:通过`git branch <branch_name>`创建新的分支,然后用`git checkout <branch_name>`切换到该分支。 ...
标题 "test-git-merge-cherry-squash" 暗示了这个压缩包可能包含一个与Git操作相关的示例或教程,特别是关于`git merge`、`git cherry-pick`和`git squash`的实践。Git是分布式版本控制系统,这些命令在版本管理和...
从提供的文件内容来看,这是一份Git命令速查表。Git是一个版本控制系统,它可以帮助程序员对代码进行版本管理。这份速查表涵盖了基础的Git操作,包括创建分支和标签、合并与变基、处理本地更改、撤销更改、提交历史...
需要被合并的commit信息,将pick命令改为 s 命令,将s合并到pick上,时间上是s向更早的pick上合并;ESC 输入 :wq 回车 弹出信息,ESC 输入 :wq 回车 打印出成功 git log oneline -n,查看n条log信息,已修改