2

我无法理解 git 本地和远程版本控制的概念。例如,我在本地 git rep 中有一个 iPhone 应用程序。最初这是我的主分支。然后我检查了一个新的分支git checkout -b "update-2.0.1"

然后我设置git push origin update-2.0.1以确保我有一个单独的分支来开发此应用程序更新,并在完成后将其合并回我的主分支。美好的!

现在我在我的更新分支上,我想为每个问题 ID 创建分支。所以我说git checkout -b "#3178"- 当我现在尝试在我的远程存储库中推送这个新问题分支时,git 说"Everything-up-to-date"

我不明白为什么不能将此问题分支推送到远程存储库?

git remote -b返回

原产地/主人

起源/更新-2.0.1

我很想看到第三个分支

起源/更新-2.0.1/#3178

4

3 回答 3

2

您需要重复第一个命令:

git push origin <name-of-branch>

为您在本地创建的每个新分支创建相应的远程分支。Git 不会推送,除非它有可以推送的地方。如果您需要,这可以是一个空分支。

然后你会得到

origin/<name-of-branch>

并不是

origin/<name-of-branch>/<name-of-other-branch>

尽管它们将在没有层次结构的情况下列出,但实际上它们确实相互分支。使用 gitk 或其他东西可以直观地查看历史日志以确认这一点。

如果您想完成该问题的处理并将其合并到它开始的分支中,请执行以下操作:

git checkout <name-of-original-branch> // update-2.0.1
git merge --no-ff <name-of-finished-branch> // #3178
git push origin // Will write local update-2.0.1 to origin

如果您想要一个很好的可视化解释为什么使用 --no-ff 选项是一个非常强大的模型来跟踪作为发布周期的一部分从其他分支脱落的分支,请查看git flow 。

于 2012-07-02T14:26:07.630 回答
0

切换到您要合并的分支,例如转到“master”并将您的另一个分支update-2.0.1合并到 master。

git checkout master
git merge update-2.0.1
git push

例如。然后,您在 master 分支中的更新分支中获得了所有更改,您可以推送它。

当您真的只需要一个新分支时,请仅制作

git branch name

来自你此时所在的分支。当你将它推送到原点时,你有一个新的远程分支

检查它

git branch -r #remote branches
git branch #local branches
于 2012-07-02T14:22:48.580 回答
0

新分支没有推送到远程存储库的原因仅仅是因为我没有使用双引号。

git push origin "new-branch"

此外,当重命名分支时,始终使用双引号 - 至少在我的情况下它有效,而并非 Web 中的所有代码示例都使用这种语法。

于 2012-07-04T15:17:40.307 回答