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

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

本文参考了网上一些博文和资料,此处不一一列出

### 撤销远程仓库中的合并提交 当需要撤回远程分支上的合并操作并恢复到之前版本时,可以采用几种不同的方法来实现这目标。具体取决于当前的工作场景以及希望达到的效果。 #### 方法:使用 `git revert` 如果只是简单地取消次特定的合并而不改变项目的历史记录,则可以通过创建个新的提交来回滚那次合并的影响: ```bash git fetch origin main git checkout -b temp-branch-for-revert git revert -m 1 <merge-commit-hash> git push origin HEAD:main --force-with-lease ``` 这里 `-m 1` 参数指定了要保留哪部分父级历史作为基础;对于大多数情况来说,默认选择第个父母节点即可[^2]。 #### 方法二:通过硬重置回到合并之前的状态 另种更直接的方式就是利用 `git reset` 命令将本地分支强制设置为合并发生前的个状态,并更新远程仓库: ```bash git fetch origin main git branch backup-before-reset # 创建备份以防万 git reset --hard HEAD~1 # 或者指定确切的哈希值代替 ~1 git push origin main --force-with-lease ``` 此过程会丢失自上次成功推送以来的所有更改,因此建议先创建个临时分支用于保存现有进度[^3]。 #### 方法三:终止正在进行中的合并 假如发现得早,在还没有完成整个合并流程的情况下可以直接中断它而无需做任何额外的操作: ```bash git merge --abort # 如果是在尝试解决冲突期间意识到错误的话 ``` 这步骤适用于那些尚未最终确认(即未执行过 `git commit`)的合并动作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值