1

次のような状況があります。

  1. master;
  2. xのトピック ブランチmaster;
  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

このエラーは、ステージングされていない変更があるために発生します。変更を隠しておくか、コミットすると、リベースコマンドを実行できるようになります。

しかし、私はあなたがここでしていることは完全に間違っていると思います。

まず、マスターブランチでコミットすることは想定されていません。トピックブランチでコミットし、マスターブランチとマージ/リベースする必要があります。

次に、やりたいことに応じて、マスターをマスターにリベースするのではなく、マスターを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を読むべきです、それは無料で、そしてそれはとても良い本です。

編集:

あなたが投稿したURLを読んだ後、私はここでいくつかの誤解を持っていたと思います。

あなたがこれを持っていると言う:

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

ここでは、2つのリベースコマンドを試します。

1、トピックに関するマスターのリベース

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、マスターのトピックをリベース

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 に答える