Git命令切换到任意git存储库/分支?

时间:2012-07-12 15:13:59

标签: git

我有一些部署脚本可以自动将存储库克隆到本地目录。不幸的是,我还没有找到一个处理更新的好方法,所以我只是事先清除了本地目录。这显然非常浪费。

理想情况下,我需要一系列命令来保证特定的本地目录成为指定仓库/分支的副本,并且所需的数据传输量最小。因此,如果dir已经在正确的repo / branch上,它将只是更新它。如果它在正确的仓库,而不是正确的分支,它将只切换到新的分支。

我确信有一种方法可以通过检查.git中的一些文件并根据找到的内容执行特定操作来实现此目的,但我希望有一种更简单的方法。

一个重要的注意事项是,本地目录中的任何更改都可以随时丢弃。

可能有一个问题已经回答了这个问题,但我找不到合适的措辞来找到它。

2 个答案:

答案 0 :(得分:6)

$ git fetch <url> <branch>      # get the most up-to-date version of that branch
                                #  (only downloads needed objects)

$ git checkout -f FETCH_HEAD    # force the working tree to match fetched branch

请注意,这确实会在回购中留下旧对象。如果您想在任何时候不可逆删除未引用的对象并清理存储库,则可以运行

$ git reflog expire --expire=now --all
$ git gc --prune=now

答案 1 :(得分:0)

  

一个重要的注意事项是,本地目录中的任何更改都可以随时丢弃。

首先,你需要的是:

git stash
git stash drop
  

如果目录已经在正确的仓库/分支上

我不确定“正确的回购”是什么意思,但我猜这会涉及检查pwd对你想要的目录和cd或其他什么。

然而有趣的部分是分支。使用以下命令:

__git_ps1 "%s"

你在当前存储库中获取当前的git分支(如果它不是git存储库,则没有任何内容)。在合并过程中还有.git文件夹,裸存储库的特殊输出。

然后,您可以使用此命令的输出检查您感兴趣的分支,以了解您是否在正确的分支上。虽然,如果你只是结帐所需的分支,即使你已经在它上面,这也简单得多。