使用远程'origin'存储库的git

时间:2011-01-21 01:21:53

标签: git optimization workflow

我在gitsvn多年后才开始cvs。我已经掌握了大部分内容,但我不认为我的常用用法是最佳的。

我的设置: 我在我的工作站上使用来自origin服务器的本地克隆存储库进行开发,该服务器在我的项目中被视为“主”存储库。我定期git fetch检查新的更新,然后git merge合并它们是否相关。

但是,当我正在研究并检查我怀疑的代码分支时。

我使用的常见序列:

git branch somenewbranch
git checkout somenewbranch
... work work work ...
git add [changed files]
git commit
git checkout master
git merge somenewbranch
git branch -d somenewbranch

以下是我认为可以优化的内容:

git push origin master:blahblah         # This won't let me push to master branch
ssh origin
cd repodir
git merge blahblah
git branch -d blahblah
logout
git status                              # this shows me I'm still ahead
git pull origin                         # to bring them back in sync
git remote show origin                  # shows I have a stale blahblah branch
git remote prune origin                 # cleans that up

现在我让他们同步了。这似乎是同步我的本地和“主”存储库的许多额外步骤。

有人可以帮助我优化我的用法吗?

谢谢。

编辑:如果我不执行单独的分支,则会收到错误消息:

remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.

2 个答案:

答案 0 :(得分:3)

如果您在进行更改后只使用git push,并且领先于origin/master,那么一切都会顺利进行。为什么要明确指定一个不同的远程分支来将本地主分支推送到?

您是否因为抱怨签出分支而无法推送到您的原始存储库?如果是这样,你犯了一个常见的错误。您需要使用裸存储库作为源,以便Git可以接受更改,而不会导致服务器上的工作副本出现问题。

Setting up a Private (bare) Repo

How to convert a normal Git repository to a bare one?

答案 1 :(得分:1)

我建议您在推送到ORIGIN之前获取和合并。如果您这样做,您应该能够直接推送到您的主分支。