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

如何解决使用 Git 将最近的提交移动到新分支?

开发过程中遇到使用 Git 将最近的提交移动到新分支的问题如何解决?下面主要结合日常开发的经验,给出你关于使用 Git 将最近的提交移动到新分支的解决方法建议,希望对你解决使用 Git 将最近的提交移动到新分支有所启发或帮助;

问题描述

转移到现有分行

如果您想将提交移动到,它将如下所示:

git checkout existingbranch
git merge master
git checkout master
git reset --hard HEAD~3 # Go back 3 commits. You *will* lose uncommitted work.
git checkout existingbranch

在执行此操作之前,您可以使用git stash. 完成后,您可以使用以下命令检索隐藏的未提交编辑git stash pop

提交到新的分行

警告:*方法有效,因为您正在使用第一个命令创建一个新分支:git branch newbranch。如果要将提交移动到,则需要在执行之前将更改合并到现有分支中git reset --hard HEAD~3(请参阅上面的移动到现有分支

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

# Note: Any changes not committed will be lost.
git branch newbranch      # Create a new branch, saving the desired commits
git reset --hard HEAD~3   # Move master back by 3 commits (Make sure you kNow how many commits you need to go back)
git checkout newbranch    # Go to the new branch that still has the desired commits

但是一定要确定要返回多少次提交。或者,您可以代替HEAD~3,简单地提供要在(/当前)分支上“恢复到”的提交(或像origin/master这样的引用)的哈希值,例如:

git reset --hard a1b2c3d4

1 你只会*“丢失”来自 master 分支的提交,但别担心,你会在 newbranch 中拥有这些提交!

对于 Git 2.0 及更高版本,如果您稍后git rebase在原始 ( master) 分支上创建新分支,您可能需要--no-fork-point在变基期间使用显式选项以避免丢失结转提交。拥有branch.autosetuprebase always一套使这个可能性比较大。

对于那些想知道它为什么起作用的人(就像我一开始一样):

你想回到 C,把 D 和 E 移动到新的分支。这是它最初的样子:

A-B-C-D-E (HEAD)
        ↑
      master

之后git branch newBranch

    newBranch
        ↓
A-B-C-D-E (HEAD)
        ↑
      master

之后git reset --hard HEAD~2

    newBranch
        ↓
A-B-C-D-E (HEAD)
    ↑
  master

由于分支只是一个指针,因此master指向最后一次提交。当您创建newBranch 时,您只需创建一个指向最后一次提交的新指针。然后使用git reset您将指针移回两次提交。但是由于您没有移动newBranch,它仍然指向它最初所做的提交。

解决方法

我想将我已承诺掌握的最后几次提交移动到一个新分支,并在进行这些提交之前将 master 带回。不幸的是,我的 Git-fu 还不够强大,有什么帮助吗?

即我怎么能从这个

master A - B - C - D - E

到这个?

newbranch     C - D - E
             /
master A - B 
喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

猜你在找的编程问答相关文章

怎样才能让 Git“忘记”一个被跟踪但现在在 .gitignore 中的文件?
Python 中的metaclasses是什么?
如何在 Linux 上查找包含特定文本的所有文件?
如何从异步调用返回响应
如何在一个表达式中合并两个字典(取字典的并集)?
HTTP 中的 POST 和 PUT 有什么区别?
使用 Git 将最近的提交移动到新分支
在 JavaScript 比较中应该使用哪个等于运算符 (== vs ===)?
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注