将最近的提交移动到Git的新分支

内容来自 DOC https://q.houxu6.top/?s=将最近的提交移动到Git的新分支

如何将主分支上的最近提交移动到新分支,并将主分支重置为这些提交之前的状态?例如,从以下状态:

master A - B - C - D - E

变成这样:

newbranch     C - D - E
             /
master A - B 


移动到现有分支

如果你想将你的提交移动到一个现有分支,它看起来像这样:

git checkout existingbranch
git merge branchToMoveCommitFrom
git checkout branchToMoveCommitFrom
git reset --hard HEAD~3 # 回退3个提交。你*会*丢失未提交的工作。
git checkout existingbranch

在执行git reset --hard HEAD~3之前,你可以使用git stash存储未提交的编辑。完成后,你可以使用git stash pop检索存储的未提交编辑。

移动到新分支

警告:这种方法有效,因为你使用第一个命令创建了一个新分支:git branch newbranch。如果你想将提交移动到现有分支,你需要在执行git reset --hard HEAD~3之前将更改合并到现有分支(请参阅上面的Moving to an existing branch)。 如果你不先合并更改,它们将会丢失。

除非有其他情况,否则这可以通过分支和回滚轻松完成。

# 注意:任何未提交的更改都将丢失。
git branch newbranch      # 创建一个新分支,保存所需的提交
git checkout master       # 检出master,这是你要返回的地方
git reset --hard HEAD~3   # 通过3个提交将master回退(确保你知道需要回退多少个提交)
git checkout newbranch    # 转到仍然具有所需提交的新分支

但是一定要确定要回退多少个提交。或者,你可以直接提供要在master(/current)分支上“回退”到的提交的哈希值(或引用,如origin/master),例如:

git reset --hard a1b2c3d4

注意:你只会从master分支“丢失”提交,但不用担心,你会在新分支中拥有这些提交!在完成上述4个步骤的命令后,检查这一点的一个简单方法是查看git log -n4,它将显示newbranch实际上保留了3个提交(原因是newbranch在那些更改已经被提交到master时已经创建!)。它们只是从master中删除了,因为git reset只影响在执行其时检出的分支,即master(参见git reset的描述:*将当前HEAD重置为指定状态*)。但是git status不会显示newbranch上的任何检出,这可能一开始会让人感到意外,但这实际上是预期的。

最后,你可能还需要将最新的更改强制推送到主仓库:

git push origin master --force

**警告:**使用Git版本2.0及更高版本,如果你稍后对新分支执行git rebase原始(master)分支,你可能需要在rebase期间使用显式的--no-fork-point选项以避免丢失携带的提交。设置branch.autosetuprebase always可以更容易地实现这一点。有关详细信息,请参阅John Mellor的回答。

Git中,如果你想将当前分支(假设为`feature-branch`)上还未提交的更改移动到另一个分支(例如`new-feature-branch`),你可以按照以下步骤操作: 1. **检查未提交的更改**: 打开终端并切换到你要推送的分支,输入命令查看当前状态: ``` git status ``` 确认你需要哪些文件或提交尚未被添加到暂存区。 2. **暂存未提交的更改**: 使用 `git add <file>` 或 `git add .` (添加所有更改) 将它们添加到暂存区,然后使用 `git commit -m "描述你的更改"` 提交这些更改到一个临时提交。 3. **创建分支**: 如果分支还没存在,可以使用 `git checkout -b new-feature-branch` 创建并切换到分支。 4. **将更改从旧分支迁移到分支**: 切换回原来的`feature-branch`,然后使用 `git rebase -i HEAD~n` (替换`n`为需要移动提交数),这会打开交互式重置脚本。在这个脚本中,找到你想移动提交行,将其标记为`rebase`,然后保存退出。Git会在分支上应用那些标记为`rebase`的提交。 5. **解决冲突**: 如果有冲突发生,Git会提示你手动编辑合并文件。解决冲突后,再次运行`git add .` 和 `git rebase --continue` 来继续迁移剩余的提交。 6. **完成迁移**: 最后,当所有更改都被移动分支后,你可以在分支上使用`git push origin new-feature-branch` 推送你的更改。 7. **删除旧分支** (如果不再需要): 当一切都完成后,你可以选择删除原始分支,但请谨慎操作,因为这可能导致丢失数据: ``` git branch -d feature-branch ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值