您的位置:首页 > 其它

Git合并远程仓库和版本回退

2016-01-10 16:19 176 查看
因为我个人需要合并两个远程仓库(保留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也不熟,所以可能有些方法比较笨,欢迎留言讨论!

本文参考了网上一些博文和资料,此处不一一列出
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: