转移到另一个分支机构并“保存”#39;目前的变化

时间:2016-12-10 02:01:31

标签: git github

以下是这样的情景:我正在分支机构A工作,但是紧急需要解决的问题,我怎样才能创建一个新的分支(说它的分支B)而不会带来当前的分支变化?

我不想查看分支A中的所有文件,因为如果分支B中的工作完成,我希望能够继续。

我不想推动分支机构A,因为它未完成。

3 个答案:

答案 0 :(得分:2)

来自 $ git worktree add -b emergency-fix ../temp master $ pushd ../temp # ... hack hack hack ... $ git commit -a -m 'emergency fix for boss' $ popd $ rm -rf ../temp $ git worktree prune https://git-scm.com/docs/git-worktree

  

你正处于重构阶段,你的老板进来了   并要求你立即修复一些东西。您          通常可以使用git-stash(1)暂时存储您的更改,但是,您的工作树处于这种状态          您不想冒险的混乱(使用新的,移动的和移除的文件,以及其他散落的碎片)          打扰任何一个。相反,您创建一个临时链接工作树来进行紧急修复,完成后将其删除,          然后恢复你之前的重构会话。

{{1}}

答案 1 :(得分:1)

您可以在A中提交更改。然后结帐B。完成B后,返回A并继续。

或者,如果您不想在“A'”,stash(保存其他地方)更改提交更改。结帐到B,当您返回A时,只需从stash pop获取(stash)更改。

  

Stashing获取工作目录的脏状态 - 即修改后的跟踪文件和分阶段更改 - 并将其保存在一堆未完成的更改中,您可以随时重新应用

  • 选项-1:提交

    $ git checkout A                      # chekcout A
    $ git commit -am 'tmp commit'         # add & commit
    
    $ git checkout B                      # checkout B
    // fix your urgent changes here
    
    $ git checkout A
    // continue A
    
  • 选项-2:藏匿

    $ git checkout A    
    $ git add .
    $ git stash                           # save unfinished changes
    
    $ git checkout B                      # checkout B
    // fix your urgent changes here
    
    $ git checkout A                      # checkout A
    $ git stash apply                     # retrieve the changes from stash
    
    // you can clear the stash
    $ git stash drop                      # remove the changes from stash 
    

答案 2 :(得分:0)

选项1:您可以存储更改

如果您对分支A进行了更改: 在分支A中,做

func textFieldShouldReturn(textField: UITextField) -> Bool {
    let fieldTextLength = textField.text!.characters.count

    if  fieldTextLength < 4 || fieldTextLength  > 30 {
        //do something about it
    }
    self.view.endEditing(true)
    return true
}

要检索更改,

git stash save "hint_to_what_stash_contains" 

如果您有多个藏匿处,可以列出它们并选择要应用的存储空间。

git stash apply

选项2:提交您的更改。

首先,在branchA中提交所有更改但不将其推送到原点,然后创建分支b来完成工作。 完成branchB后,您可以签出分支A以恢复工作。

恢复branchA的工作

git stash list
git stash apply stash@\{<STASH_NUMBER>\}

选项3:我不推荐,是补丁的东西..我看到有些人使用它。做一个git diff并将其保存在一个文件例如“branch_a_changes.patch”中,当你想恢复你的工作时就做了 git apply branch_a_changes.patch