「test」という名前の1つのブランチに、ローカルで変更を加えたファイルがたくさんあります。特定のファイルを選択してから、それらを新しいブランチに移動し、リモートでその新しいブランチにコミットしたいと思います。
上司から、実行git commit -p
してから保持したいものを確認し、どういうわけかそれを新しいブランチに追加してプッシュするようにアドバイスされました。私はこれを行う方法を理解するのに苦労しています。
「test」という名前の1つのブランチに、ローカルで変更を加えたファイルがたくさんあります。特定のファイルを選択してから、それらを新しいブランチに移動し、リモートでその新しいブランチにコミットしたいと思います。
上司から、実行git commit -p
してから保持したいものを確認し、どういうわけかそれを新しいブランチに追加してプッシュするようにアドバイスされました。私はこれを行う方法を理解するのに苦労しています。
最初に新しいブランチに切り替えます。
git checkout -b mynewbranch
次に、そのブランチに入れたくないファイルをすべて削除します。これが完了したら、次を実行します。
git add -u
git commit
最後に、新しいブランチをリモートにプッシュします。
git push origin mynewbranch
上司の推奨するアプローチは、同じファイル内に新しいブランチの変更と古いブランチの変更 (または破棄するものなど) が混在している場合にのみ意味があります。
それが事実であると仮定します:
作業コピーを変更せずに、新しいブランチを作成して切り替えます。
git checkout -b mynewbranch
ただし、何も削除しないでください。この段階で損失が発生する可能性があります
今のところ新しいブランチにのみ存在するはずの新しい(追跡されていない)ファイルを追加します
git add <filenames>
新しいブランチに必要な変更を追加します
git add --patch
また
git add --interactive
正直に言うと、インタラクティブは少し練習が必要だといつも思います。それは最もフレンドリーなインターフェースではありません。
インデックスを新しいブランチにコミットします。最初にレビューして、意味があることを確認できます
git status
git diff --cached
git commit
このブランチに追加しないことを選択した変更は、作業コピーにのみ存在することに注意してください
追加されていない、コミットされていない作業コピーの変更を持って、前のブランチに戻ります
git checkout master
これを実現するにはいくつかの方法があり、それぞれに長所と短所があります。
すでに説明したように、別のブランチに切り替え、不要なファイルを削除し、必要なファイルをコミットします。
git checkout -b mynewbranch
git add -u
git commit
git push origin mynewbranch
クイックで汚いですが、これらのファイルが既に変更されていると、すべての履歴が失われます。
stash
あるブランチから変更を加えて、別のブランチに適用できます。
git shash # Will put your changes into `hidden pocket`
git checkout -b mynewbranch
git stash pop # Your changes will pop out from `hidden pocket`
git commit
git push origin mynewbranch
滑らかで正確ですが、これらのファイルの履歴があれば、まだ失われます.
あるブランチから別のブランチにコミットを転送できます。
git bundle file.name revision..list # Packing revisions to file
git checkout -b mynewbranch
git bundle unbundle file.name # Unpacking revision in new branch
洗練された、履歴を保持しますが、選択したリビジョン中に他のファイルに触れなかった場合にのみ保存します。
パッチを使おう!
git format-patch revision..list # generate patch files for each revision in the list
git checkout -b mynewbranch
cat filename.patch | git am # Applying patch to the current branch
どのパッチを適用する必要があり、どのパッチを適用すべきでないかを判断するのは複雑な場合があります。ただし、プロセスを完全に制御できます。
上記のいずれもニーズに 100% 適合しない場合は、アプローチを組み合わせて必要なものを実現できます。