代码之家  ›  专栏  ›  技术社区  ›  Richard

快速切换分支的Git最佳实践

git
  •  20
  • Richard  · 技术社区  · 15 年前

    我有多个活动分支需要同时处理。显然,我可以为每个目录创建两个具有不同分支的工作目录。这是在不需要“提交”和“签出”就可以从一个分支切换到另一个分支的情况下完成这项工作的唯一方法吗?

    6 回复  |  直到 10 年前
        1
  •  18
  •   dahlbyk    15 年前

    是的,不过你可以用 git stash 而不是 commit 如果您还没有准备好完成当前正在进行的工作。

        2
  •  18
  •   cweider    15 年前

    如果您临时切换分支 git stash 不过,这是有用的,请记住,提交不需要永远持续下去;您可以临时提交,以便稍后回滚。

    所以我的建议是,如果是一个长时间的转换,做一个 git commit 相反,因为根据你的记忆,藏匿物品很容易被遗忘/丢失/等等。

    [In MyBranch]
    >$ git commit -m "WIP: Stuff I was working on."
    >$ git checkout AnotherBranch
    [Do Stuff]
    >$ git checkout MyBranch
    >$ git reset HEAD^
    [Continue]
    

    既然这是一个关于最佳实践的问题,记住 给你的藏品一个有用的信息 使用 git stash save 否则以后很难找到。

        3
  •  5
  •   VonC    15 年前

    git clone ,通过 local protocol 是一个很好的选择,可以同时在多个分支上工作。

    我通常将一个本地裸回购克隆到多个副本中(每个活跃分支一个),并将该裸回购用作中央集成回购(因为我可以轻松地推送到裸回购,而不能推送到非裸回购)。

        4
  •  3
  •   skensell    11 年前

    我厌倦了在树枝间切换,所以我写了一个更聪明的 git checkout . 将以下内容插入 ~/.bash_profile ,源代码,然后简单地使用 gch 切换到上一个分支。

    current_git_branch() {
        git branch | grep \* | awk '{ print $2 }'
    }
    # a smart git checkout, with no args it switches to last branch.
    gch() {
        if [ -n "$1" ]; then 
            echo `current_git_branch` >"/tmp/last_git_branch_used.txt"
            git checkout "$@"
        else
            if [ ! -f "/tmp/last_git_branch_used.txt" ]; then echo >&2 "ERROR: Please run gch with 1 argument first."
            else
                echo `current_git_branch` >"/tmp/last_git_branch_used.temp"
                git checkout `cat /tmp/last_git_branch_used.txt`
                mv "/tmp/last_git_branch_used."{temp,txt}
            fi
        fi
    }
    
        5
  •  1
  •   user229044    13 年前

    如果您正在进行所谓的每个功能开发的分支,如下所述:

    http://martinfowler.com/bliki/FeatureBranch.html

    您可能还需要确保切换数据库模式。Git可以通过涂抹和清洁来帮助解决这个问题。这样就可以在本地管理多个数据库。当您签出一个新分支时,您会弄脏连接字符串,以用分支名称注释数据库名称。如果在任何时候提交配置文件,则通过从连接中删除分支的名称来清除配置文件。

    有关详细信息,请查看 Pro Git book .

        6
  •  0
  •   Gismo Ranas    10 年前

    我有这样的bash函数:

    function gitredocommit {
      lastcomment=`git log | grep Date -A 2 -m 1 | tail -1 | sed -e 's/^ *//' -e 's/ *$//' | grep -v Merge`
      if [ -n "$lastcomment"  ]; then
        git reset --soft HEAD^; git add ../; git commit -m"$lastcomment"
      else
        echo "last commit was a merge, won't redo it"
      fi
    }
    

    您创建了一个新的分支,进行第一次(和最后一次)提交,然后通过这个,您可以做新的事情并覆盖这个提交。如果你需要从主服务器上更新,你可以用它来做

    git rebase master
    

    当然,所以你的承诺总是在分支中处于最重要的位置。只要不合并master中的分支,这就可以工作。