プル後にコミットされた(プッシュされていない)変更を新しいブランチに移動する 質問する

プル後にコミットされた(プッシュされていない)変更を新しいブランチに移動する 質問する

私はかなりの量の作業 (「あなたのブランチは '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/mastermaster

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、変更をまだプッシュしていないため、履歴が整理されるようにリベースを実行することをお勧めします。(また、最終的にトピック ブランチをマスターにマージすると、変更がより明確になります。)

おすすめ記事