git ,, local push''从feature branch到master,没有checkout

时间:2010-02-19 14:38:31

标签: git merge version-control branch git-checkout

我想从FeatureBranch合并到master,而不是首先使用checkout master''。 我试过(在FeatureBranch中)

git push . master

但我得到了一定程度的惊讶:

Everything up-to-date

尽管FeatureBranch中的提交尚未(但)存在于master中

我希望能够做到的一步本地推送的原因是:

  1. 我想对留在主分会的同事进行更改
  2. 没有额外的步骤,, checkout master''
  3. 因此能够继续留在FeatureBranch
  4. 并避免快速更改许多文件,这些文件会混淆/警告许多与repo中的目录/文件有关的工具
  5. 我知道我可以用不同的方式在更多的步骤中做到这一点。但我想知道是否有一步到位的解决方案(我认为应该有)。

    我认为/意识到,如果出现冲突,无论如何我都必须切换到主人。但在大多数情况下,我没有冲突,因此可以从一步解决方案中受益。

    我的git版本:

    git --version
    git version 1.6.5.1.1367.gcd48
    

    (视窗)

    TIA
    karolrvn

5 个答案:

答案 0 :(得分:2)

关于push命令为何如此行事的问题......

Push用于将提交从一个存储库传播到另一个,而不是传播到存储库中的分支。在您的情况下,您正从一个存储库推送到同一个存储库,因此答案是“一切都是最新的”,就像它应该的那样。在这种情况下,您命名两个不同分支的事实无关紧要。

答案 1 :(得分:1)

您不能提交除当前分支以外的分支;换句话说,git commit创建的新节点始终是当前HEAD的子节点。

我偶尔使用一个单独的'staging'repo,以避免在我的实时开发环境中切换分支的开销:

# Currently working on branch 'foo' in $SOME_DIR/main-repo
# main-repo is a local clone of shared-repo

# Create the staging repo alongside the existing main-repo
cd $SOME_DIR
git clone shared-repo staging-repo
cd staging-repo
git remote add local ../main-repo

# Switch back to main-repo and continue working
cd main-repo
# (Make changes and commit to branch foo ...)

# Switch to the staging repo
cd $SOME_DIR/staging-repo

# Make sure we are up to date with shared repo (*)
git pull

# Merge changes from main-repo
git fetch local
git merge local/foo

# Push changes up to the shared repo
git push

这种方法的一个潜在问题是,它不允许您测试在分支'foo'上所做的更改中合并的结果与同时在shared-repo / master (*)中进行的任何更改。根据更改的性质,这可能没问题,但在大多数情况下,您希望在推送到共享存储库之前至少进行快速的健全性检查(例如检查代码是否仍然编译,可能运行冒烟测试)。 / p>

为了做到这一点,你需要:

  1. 构建staging-repo - 但在这种情况下,合并可以直接在main-repo中完成
  2. 在main-repo的单独构建环境中拥有staging-repo,即$SOME_OTHER_DIR/staging-repo。这样就可以在不破坏main-repo环境的情况下构建和/或测​​试staging-repo。

答案 2 :(得分:0)

看来你真正想做的是合并,而不是推动?不幸的是,如果没有作为合并目标的分支,我认为这是不可能的,所以命令序列将是:

git checkout master
git merge FeatureBranch
git checkout FeatureBranch

整个操作应该不到一秒钟,所以我不确定为什么你强烈反对为此更改为主分支......

答案 3 :(得分:0)

问题“Merging Branches Without Checkout”提供了很好的答案,解释了为什么需要结账 保持一个单独的仓库(目标分支签出)是另一种方式。

但重点仍然是:push/pull远程回购有关 结帐是关于本地回购。

Git Data Transport Commands

如果您考虑到这种架构,则意识到您没有推送到master

答案 4 :(得分:0)

我遇到了同样的问题,根据你的想法,我发现解决方案非常简单:

git push . HEAD:master

这是有效的,只要master可以快速转发到当前的头部,即你在master上启动当前分支并且从那时起就没有对master进行新的提交。