私はかなりの量の作業 (「あなたのブランチは 'origin/master' より 37 コミット進んでいます。」) を行いましたが、これは実際には ではなく独自のブランチに配置される必要がありましたmaster
。これらのコミットは私のローカル マシンにのみ存在し、 にはプッシュされていませんが、他の開発者が にプッシュしていて、私がそれらの変更をプルしたというorigin
点で、状況はやや複雑です。origin/master
37 個のローカル コミットを遡及的に新しいブランチに移動するにはどうすればよいですか? ドキュメントによると、git rebase --onto my-new-branch master
または で...origin/master
これを行う必要があるようですが、どちらも「致命的: 単一のリビジョンが必要」というエラーが表示されます。man git-rebase
には、リビジョンの提供については何も記載されておらずrebase
、例でもそうしていないため、このエラーを解決する方法がわかりません。
(これは既存のコミットされていない作業を Git の新しいブランチに移動するまたはローカルのコミットされていない変更を別の Git ブランチにマージするにはどうすればよいですか?これらの質問は、ローカルにコミットされた変更ではなく、ローカルの作業ツリー内のコミットされていない変更を扱っているためです。
ベストアンサー1
まだコミットを他の場所にプッシュしていないので、これで問題ないはずです。 の後にブランチの履歴を自由に書き換えることができますorigin/master
。まず を実行して、が最新であることgit fetch origin
を確認します。現在 にいると仮定すると、次の操作を実行できるはずです。origin/master
master
git rebase origin/master
origin/master
... は、に含まれていないすべてのコミットを再生しますorigin/master
。 rebase のデフォルトのアクションは、マージコミット (たとえば、 がgit pull
おそらく導入したもの) を無視し、各コミットによって導入されたパッチを に適用しようとすることですorigin/master
。 (途中でいくつかの競合を解決する必要がある場合があります。) 次に、結果に基づいて新しいブランチを作成できます。
git branch new-work
...そしてmaster
背中を次のようにリセットしますorigin/master
:
# Use with care - make sure "git status" is clean and you're still on master:
git reset --hard origin/master
git branch
、などを使用してこのようなブランチを操作する場合、さまざまな参照がどこを指しているかを把握しているかどうかを確認するために、 または同様のツールgit reset
を使用してコミット グラフをgitk --all
頻繁に確認すると便利です。
あるいは、マスターが最初にどこにいるかに基づいてトピック ブランチを作成し ( git branch new-work-including-merges
)、master
上記のようにリセットすることもできます。ただし、トピック ブランチにはからのマージが含まれておりorigin/master
、変更をまだプッシュしていないため、履歴が整理されるようにリベースを実行することをお勧めします。(また、最終的にトピック ブランチをマスターにマージすると、変更がより明確になります。)