将现有的,未提交的工作移动到Git中的新分支

时间:2009-09-08 15:57:05

标签: git git-branch git-stash git-reset

我开始研究一项新功能,经过编码后,我认为这个功能应该在它自己的分支上。

如何将现有的未提交更改移至新分支并重置当前更改?

我想重置当前分支,同时保留新功能的现有工作。

9 个答案:

答案 0 :(得分:3286)

使用以下内容:

git checkout -b <new-branch>

这将使您的当前分支保持原样,创建并签出新分支并保留所有更改。然后,您可以使用以下命令进行提交:

git add <files>

并使用以下命令提交到您的新分支:

git commit -m "<Brief description of this commit>"

工作目录中的更改和索引中更改的更改尚不属于任何分支。这会改变这些更改的结束位置。

您没有重置原始分支,它保持不变。 <old-branch>上的最后一次提交仍然是相同的。因此,您checkout -b然后提交。

答案 1 :(得分:290)

可替换地:

  1. 将当前更改保存到临时存储:

    $ git stash

  2. 根据此存储创建一个新分支,并切换到新分支:

    $ git stash branch <new-branch> stash@{0}

  3. 提示:使用Tab键减少键入存储名称。

答案 2 :(得分:40)

如果您在编码时在主分支上进行了提交,但您现在想将这些提交移到另一个分支:

  1. 将您当前的历史记录复制到新分支上,同时带来任何未提交的更改:

    git checkout -b <new-feature-branch>
    
  2. 现在强迫原作&#34;凌乱&#34;分支回滚:(没有切换到它)

    git branch -f <previous-branch> <earlier-commit-id>
    

    例如:

    git branch -f master origin/master
    

    或者如果你做了4次提交:

    git branch -f master HEAD~4
    
  3. 警告: git branch -f master origin/master似乎重置该分支的跟踪信息。因此,如果您已将master分支配置为推送到origin/master以外的某个位置,则该配置将丢失。

    另一种方法是使用this reset technique。但是这些说明将丢弃您拥有的任何未提交的更改。如果你想保留它们,先将它们藏起来并在最后取出它们。

答案 3 :(得分:17)

如果你提交它,你也可以挑选单个提交ID。当我开始在master中工作时,我经常这样做,然后想要在我推送到我的原点之前创建一个本地分支./。

git cherry-pick <commitID>

here所述,你可以使用樱桃挑选,但这可能是一个用例。

答案 4 :(得分:14)

常见的情况如下:我忘记了为新功能创建新分支,并且在旧功能分支中进行了所有工作。我已经将所有“旧”工作都提交给master分支,并且我希望我的新分支可以从“ master”中成长。我还没有提交新工作。 这是分支结构: “主人”->“旧功能”

git stash 
git checkout master
git checkout -b "New_branch"
git stash apply

答案 5 :(得分:1)

实际上,使用GitHub Desktop确实有一种非常简单的方法,因为我以前不相信这是一个功能。

您需要做的就是在GitHub Desktop中切换到新分支,它会提示您将更改保留在当前分支上(将被隐藏),或者将更改随身带到新分支。只需选择第二个选项,即可将更改带到新分支。然后您可以照常提交。

GitHub Desktop

答案 6 :(得分:1)

提交更改的3个步骤

假设您已经在GitHub上创建了一个新分支,名称为 feature-branch

enter image description here

FETCH

    git pull --all         Pull all remote branches
    git branch -a          List all branches now

签出并切换到功能分支目录。您可以简单地从上述branch -a命令的输出中复制分支名称

git checkout -b feature-branch

验证

接下来使用git branch命令查看当前分支。它将显示带有*的功能分支

git branch         

提交

git add .   add all files
git commit -m "Rafactore code or use your message"

在源服务器上进行更新和推送更改

 git pull origin feature-branch
 git push origin feature-branch

答案 7 :(得分:0)

我用@Robin回答并列出了我所做的所有事情,

library(tidyverse)

game_data %>% 
  group_by(player) %>% 
  summarize(allwins = sum(n_wins)) %>% 
  add_count(allwins) %>%
  complete(allwins = 1:max(allwins), 
           fill = list(n = 0)) %>%
  distinct(allwins, Percentage = round(n / length(na.omit(player)) * 100, 2)) %>%
  ggplot(aes(x = allwins, y = Percentage)) +
  geom_bar(stat = 'identity')

如果存储库有多个存储库,请查看将哪个存储库应用于新分支:

git status                               <-- review/list uncommitted changes
git stash                                <-- stash uncommitted changes
git stash branch <new-branch> stash@{1}  <-- create a branch from stash
git add .                                <-- add local changes
git status                               <-- review the status; ready to commit
git commit -m "local changes ..."        <-- commit the changes
git branch --list                        <-- see list of branches incl the one created above
git status                               <-- nothing to commit, working tree (new-branch) is clean
git checkout <old-branch>                <-- switch back

并检查单个藏匿处,

git stash list  
  stash@{0}: WIP on ...  
  stash@{1}: WIP on ...

或一次检查所有隐藏物:

git stash show stash@{1}

答案 8 :(得分:0)

这可能对所有使用GIT的工具都有帮助

命令

Switch分支-将您的更改移至新分支。然后,您可以提交更改。

 $ git checkout -b <new-branch>

TortoiseGIT

右键单击您的存储库,然后使用TortoiseGit-> Switch / Checkout

enter image description here enter image description here

SourceTree

使用“结帐”按钮切换分支。单击分支后,您将在顶部看到“签出”按钮。当前分支中的更改将自动应用。然后,您可以提交它们。

enter image description here