在程序开发的过程中我们难免有搞错的时候。在项目中,如果因为我们个人的操作不当把整个代码仓库毁了就不好了,好在git的开发人员为我们想到了这一点,可以使用后悔药操作
来将代码恢复
1. git log
git log 命令可以显示所有提交过的版本信息,也就是每个commit的信息。比较单一
然后也可以使用git diff来查看commit之间的 差异
git diff commit-id1 commit-id2
2. git reflog
git reflog顾名思义就是查看ref变化的log,而引起ref变化的操作有
git checkout branchName ( 切换分支 ) :moving from branch1 to branch2
git commit ( 提交 )
git reset commit (重置)
git checkout commit (签出某一个提交)
git merge (合并操作)
git pull (相当于 fetch + merge )
git pull : Fast-forward ( 没有冲突,快速前进)
git rebase (褊急)
git pull --rebase ( 相当于fetch + rebase )
git clone ( 初始化ref
也即所有基本操作都会引起ref的变化。换句话说git reflog可以查看我们以往仓库的几乎所有状态
进而我们可以利用ref-id(图中黄字) 来找回删除的commits
git reflog
git checkout <reflog-Id>
git checkout -b <newBranchName>
也可以回到以往的任何状态
git reset --hard ref-i
回到以往状态后,推送到远端
git push origin HEAD --force
这样就把仓库恢复了
3. git cherry-pick
//TODO
此时,我们又想保留新commit的代码,怎么办呢?
这个时候就用上了git cherry-pick,刚刚我们回到了旧版本最新,现在我们想加上新commit,操作如下
git cherry-pick `新commit的hash码`
git cherry-pick可以理解为”挑拣”提交,它会获取某一个分支的单笔提交,并作为一个新的提交引入到你当前分支上。当我们需要在本地合入其他分支的提交时,如果我们不想对整个分支进行合并,而是只想将某一次提交合入到本地当前分支上,那么就要使用git cherry-pick了。