1

我有以下情况:

  1. 一个分支master
  2. 一个主题分支xmaster
  3. 我已经对 做出了承诺master,并且我也希望能够在其中使用x它。我的理解是我必须重新x建立基础master

这就是我所做的:

  1. 结帐x分支:VCS -> Git -> Branches -> Local branches -> x -> Checkout;
  2. VCS -> Git -> Rebase -> Select master in onto
  3. 单击变基。

此时出现一个错误,告诉我检查 VC 控制台以获取详细信息。这是控制台显示的内容:

23:59:22.839: git rebase -i -v -m refs/heads/master
Cannot rebase: You have unstaged changes.
Additionally, your index contains uncommitted changes.
Please commit or stash them.

任何地方的任何分支都没有挂起的更改。一切都已提交(如果有什么不同,则推送到 Bitbucket)。我这样做对吗?我怎样才能重新建立我的分支master

4

1 回答 1

1

发生错误是因为您有未暂存的更改,存储它们或提交它们将允许您执行 rebase 命令。

但是,我认为你在这里做的是完全错误的。

首先,您不应该在主分支上提交,您应该在主题分支上提交并将其与/在主分支上合并/变基。

其次,根据你想要做的,它是在 x 上重新定位 master,而不是在 master 上重新定位 x。

所以你应该

1, checkout master  --> git checkout master
2, rebase on x      --> git rebase x
3, do some merge job
4, continue the rebase --> git rebase --continue

顺便说一句,您应该阅读pro-git,它是免费的,而且是一本非常好的书。

编辑:

阅读您发布的网址后,我想我在这里有一些误解。

说你有这个:

$ git log --oneline --graph --decorate --all
* c85d8bd (HEAD, master) dev on master again
| * 431a9c6 (topic) dev on topic
|/
* 4ad2cc4 dev on master
* d576e88 init

在这里我们将尝试两个变基命令:

1、rebase master on topic

git checkout master
git rebase topic

这将使历史看起来像这样:

$ git log --oneline --graph --decorate --all
* 03021da (HEAD, master) dev on master again
* 431a9c6 (topic) dev on topic
* 4ad2cc4 dev on master
* d576e88 init

2、rebase topic on master

git checkout topic
git rebase master

你的历史将是这样的:

$ git log --oneline --graph --decorate --all
* adc93f1 (HEAD, topic) dev on topic
* c85d8bd (master) dev on master again
* 4ad2cc4 dev on master
* d576e88 init

这都是关于你想要谁在谁身上:)

我以这种方式记住这一点:

merge with <branch>
rebase on <branch>

但有一个例外,同时使用:

git rebase --onto

您可以在pro-git的第 3.6 章中找到这些详细信息

于 2012-08-27T03:10:28.960 回答