4

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

git push . master

但我得到了(在某种程度上令人惊讶):

Everything up-to-date

尽管在 FeatureBranch 中有提交,但在 master 中(尚未)存在。

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

  1. 我想给留在 master 分支上的同事做一些更改
  2. 没有额外的步骤,结帐大师''
  3. 因此能够仍然留在 FeatureBranch
  4. 并避免快速更改许多文件,这会混淆/警告许多与 repo 中的目录/文件有关的工具

我知道我可以用不同的方式在更多的步骤中做到这一点。但我想知道是否有一个一步解决这个问题(我认为应该有)。

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

我的 git 版本:

git --version
git version 1.6.5.1.1367.gcd48

(Windows)

TIA
卡罗尔

4

5 回答 5

2

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

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

于 2010-02-20T13:35:24.640 回答
1

您不能提交到当前分支以外的分支;或者换一种说法,创建的新节点git commit始终是当前 HEAD 的子节点。

为了避免在我的实时开发环境中切换分支的开销,我偶尔会使用单独的“暂存”存储库:

# 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 中所做的任何更改的结果(*)。根据更改的性质,这可能没问题,但在大多数情况下,您至少需要在推送到共享存储库之前进行快速的完整性检查(例如检查代码是否仍然编译,可能运行冒烟测试)。

为此,您需要:

  1. 构建 staging-repo - 但在这种情况下,合并可以直接在 main-repo 中完成
  2. 在与 main-repo 不同的构建环境中拥有 staging-repo,即$SOME_OTHER_DIR/staging-repo. 这将允许在不污染 main-repo 环境的情况下构建和/或测​​试 staging-repo。
于 2010-02-19T15:34:02.567 回答
0

“在没有结账的情况下合并分支”这个问题提供了很好的答案,解释了为什么需要结账。
保留一个单独的 repo(签出目标分支)是另一种方式。

但要点仍然存在:推/拉是关于远程回购的。
结帐是关于本地回购。

Git 数据传输命令

如果您考虑到该架构,您就会意识到您不会推送到master.

于 2012-09-27T06:43:15.237 回答
0

看来您实际上想要做的是合并,而不是推送?不幸的是,如果不在作为合并目标的分支上,我认为这是不可能的,因此命令序列将是:

git checkout master
git merge FeatureBranch
git checkout FeatureBranch

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

于 2010-02-19T20:20:22.600 回答
0

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

git push . HEAD:master

这行得通,只要 master 可以快速转发到您当前的负责人,即您在 master 上启动了当前分支并且此后在 master 上没有新的提交。

于 2015-09-07T12:33:47.160 回答