如何将未压缩的已提交代码移动到另一个分支?

时间:2017-07-20 13:25:59

标签: git

所以我有以下情况:

我在本地提交了一些工作,而没有推送到远程存储库。我想将这个本地代码移动到另一个分支,因为如果我拉,将会有一些修改会破坏我在本地放置的所有工作。

这是旧分支上“git status”的输出:

“在分支上 您的分支在1个提交之前超过'origin /'。   (使用“git push”发布您的本地提交) 无需提交,工作目录清理 “

这是新创建的分支上“git status”的输出:

“在分支上 无需提交,工作目录清理“

7 个答案:

答案 0 :(得分:7)

在我看来,答案是:

  1. 创建一个具有当前状态的新分支:
    git checkout -b new-branch
    
  2. 返回您要从中删除未推送的提交的分支
    git checkout -
    
  3. 删除未推送的提交
    git reset --hard origin
    

答案 1 :(得分:4)

如果它只是一次提交,你可以简单地执行

git reset HEAD~1
git stash
git checkout anotherbranch
git stash pop

如果你想把它放在一个全新的分支中,另一种方式是

git branch newbranch
git reset --hard HEAD~1

答案 2 :(得分:2)

如果您在提交后创建了分支,则应该包含您要移动的提交。您可以使用def repaired_corpus(path): _buffer = "" for line in open(path): doc_end = line.find(doc_end_pattern) if doc_end != -1: _buffer += line[:doc_end + len(doc_end_pattern)] yield _buffer _buffer = "" else: _buffer += line some_state = sc.broadcast(my_state) in_rdd = spark.sparkContext.parallelize(repaired_corpus(path)) json_docs = in_rdd.map( lambda item: process_element( item, some_state.value ) ).saveAsTextFile("processed_corpus.out") 验证这一点,您应该在日志中看到您的提交作为第一个。

在您不再希望提交的分支上git log。这将从分支中删除提交并重置分支,以便您现在可以毫无问题地进行提取。 (确保你的提交在另一个分支上,因为这样做后你的提交就会消失了。)

如果提交不在您的其他分支上,您可以删除分支并使用git reset --hard HEAD~从原始分支再次创建它,或者您可以使用git checkout -b <branch name>将其选择到您的分支中。将在您的分支上复制提交。然后,您可以使用上述步骤重置原始分支。

答案 3 :(得分:2)

看看这个答案,它会很有用:https://stackoverflow.com/a/65263420/854405

答案 4 :(得分:0)

这就是我要做的事情:

# Switch back to the old branch (where the commit was initially made)
git checkout old_branch
# Make this branch point to its previous state (not containing the new commit)
git reset --hard origin/old_branch
# pull the changes
git pull

答案 5 :(得分:0)

你有选择:

  1. 从当前分支开始分支,创建一个新的,已经提交的所有提交,然后将旧的提交重置为原始提交
  2. Cherry选择提交给新分支
  3. 将当前分支合并到启用了快进的新分支
  4. 在旧分支上重新启动新分支
  5. 我确信还有更多选择。这取决于你的具体情况,哪一个最好。

答案 6 :(得分:0)

现状:

(如果我理解正确的话):

This is what you want:


Branch A -> |<---Commit A--->| 
                        \  
Branch B                  ->|<---Commit B--->|   


But This is what you currently have:


Branch A -> |<---  Commit A --->|  ->   |<---  Commit B --->|   

如何到达那里?

现在,分支A的ref指向提交B SHA。我们需要它指向提交A.我们如何做到这一点?

  1. 首先进入分行A:
  2. git checkout branch-A

    1. 一旦你在分支A上,我们想要强行重写分支A引用指向的提交 - 我们想要重置 - 但是我们仍然希望在它们被暂存之前保留这些文件 - 所以我们可以转移他们到了一个新的分支。为了做到这一点,我们必须使用带有 - mixed标志的git reset。 HEAD~1表示您正在重置为一个提交,它恰好是您现在所处的提交之一。
    2. git reset HEAD~1 --mixed

      1. 现在您在这里,只需创建一个新分支:
      2. git checkout -b new-branch-name

        1. 然后立即提交更改:
        2. git commit -am ‘fix ABC bug’

          瞧!非常简单!

          更好的解决方案

          另一种方法是在分支A到HEAD~1上执行--hard重置,并简单地从commit b中检出新分支 - 最新提交。在这种情况下,我们不会添加任何不必要的提交。