git操作难点1 -- 找到过往,合并未来

在Git中,当误删文件内容并添加新内容后,如何找回旧内容并保留新内容?通过`git reflog`找到历史操作记录,使用`git reset --hard`恢复旧版本,再用`git cherry-pick`合并新版本,解决冲突。此方法适用于目标分支无变化的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

该问题模拟了:
场景 :删除项目文件的一部分内容后,在同一个文件里写入了新的内容;
问题 :因为某些需要找回了原来的内容,找回原来内容后,这时我们又同时要新的内容(因为找回原来内容时覆盖了新内容),该怎么办?

先连续向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

参考

https://blog.youkuaiyun.com/bin622/article/details/78718238

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值