问题
该问题模拟了:
场景 :删除项目文件的一部分内容后,在同一个文件里写入了新的内容;
问题 :因为某些需要找回了原来的内容,找回原来内容后,这时我们又同时要新的内容(因为找回原来内容时覆盖了新内容),该怎么办?
先连续向git仓库中add并commit六次,readme.md为控制台所在目录下的目标文件
git init // git 初始化
// 下面执行6次写入add 和 commit
//写入:feature-1
git add .\readme.md
git commit -m 'feature-1'
写入:feature-2
git add .\readme.md
git commit -m 'feature-2'
写入:feature-3
git add .\readme.md
git commit -m 'feature-3'
写入:feature-4
git add .\readme.md
git commit -m 'feature-4'
写入:feature-5
git add .\readme.md
git commit -m 'feature-5'
写入:feature-6
git add .\readme.md
git commit -m 'feature-6'
然后通过下面的命令查看各个命令的id,将头指针指向‘feature-1’,模拟删除 feature2 - feature6 :
git log --oneline
git reset --hard feature-1的id
这时我们向文件写入新的内容 feature-7:
写入:feature-7
git add .\readme.md
git commit -m 'feature-7'
关键来了,此时如何找回 feature2 - feature6的内容:
git reflog
我们可以通过 git reflog,查看过去我们所有的各种操作,同时更可以获取各个内容的id!此时我们复制feature-6的id,然后
git reset --hard feature-6的id
feature2 - feature6的内容都找回来(但feature-7没了),此时我们又想要新加的feature-7,怎么办?
又是一波关键操作 :git cherry-pick feature-7的id,
feature-7的id可以在刚刚的git reflog中查询到:
git cherry-pick feature-7的id
执行上面的操作后,只需点击文件上的“accept both changes”即可将两者合并了!!!
【核心命令小结】
git reflog
可以查看所有分支的所有操作记录(尤其也包括id)
git reset --hard < commit id >
改变头指针所指向的位置,可以恢复到之前某个提交的版本
git cherry-pick < commit id > 拾回樱桃,合并commit。将commit id的这次提交合并到当前分支上!
Git可以把任意分支的commit提交到任意别的分支,只需拿到commit的id,然后切换到要合并的分支,使用git cherry-pick commit id就ok了,注意这种方法最好针对目标合并分支没有变化的情况,否则就手动解决冲突把。
想更加深入了解git cherry-pick commit id 命令的使用,请参考:https://www.cnblogs.com/0201zcr/p/5752771.html