因为我个人需要合并两个远程仓库(保留commit log),就查了一些相关资料,整理了一些操作。而在我的操作过程中,由于一些误删除和误提交,又引发了版本回退的一些问题,一并做说明。
1. 合并两个仓库
合并的思路就是讲一个仓库添加进另一个仓库作为一个远程仓库,然后为这个远程仓库创建一个分支,然后将这个分支合并到主分支
假设有一个仓库是我要保留的main,另外一个要添加进这个仓库为other,两个都pull下来了。两个仓库在同一个文件夹下,以下操作均在main文件夹中
(1)将other作为远程仓库添加到main中
git remote add RemoteRepo ../other/
(2)将other的内容放到main中
git fetch RemoteRepo
(3)为other的主分支在main中建立一个新分支
git checkout -b NewBranch RemoteRepo/main
(git checkout命令加上-b参数表示创建并切换)
(4)切换回main的主分支
git checkout master
(5)和并分支
git merge NewBranch
(6)修改并提交新仓库的文件
上面是非常简单的一种方法,复杂的仓库还需要处理分支树
2. 版本回退
因为我的愚蠢和无知,在合并仓库的过程中,误删除和提交了一些文件,不得已,使用版本回退进行找回
(1)通常情况是工作区发生了误操作,需要用暂存区的文件来替换工作区的文件
git checkout .
git checkout -- <file>
上面两条命令会用暂存区全部(第一个)或指定的文件(第二个)替换工作区的文件。
这个操作很危险,会清除工作区中未添加到暂存区的改动。
(此处可以看出,checkout有两种用法,checkout用于切换分支,checkout --用于撤销操作)
(2)在工作区发生了误操作,并且添加到了暂存区中,则需要利用HEAD指针回退
git reset HEAD <file>
(3)愚蠢的我甚至都提交到版本库了.....
首先需要查看提交日志
git log
git log --pretty=oneline
第一个是详细提交信息,第二个只有提交的版本号
然后回退版本,回退版本又分为两种
(3.1)把版本库、暂存区和工作区都回退到HEAD的前一个版本。
git reset --hard HEAD^
回退到上一个版本(--hard 表示放弃所有本地改动)
git reset --hard HEAD^~100
退回上100个版本
git reset --hard id
回退到id号指示的版本
(3.2)工作区不变,把暂存区和版本库回退到HEAD的前一个版本。
git reset HEAD^
git reset HEAD id
(3.3)只是撤出对暂存区的添加
git reset
仅用HEAD指向的目录树充值暂存区,工作区不受影响。相当于把git add命令更新到暂存区的内容撤出暂存区。
上述就是一些主要过程,因为对git也不熟,所以可能有些方法比较笨,欢迎留言讨论!
本文参考了网上一些博文和资料,此处不一一列出