0

「test」という名前の1つのブランチに、ローカルで変更を加えたファイルがたくさんあります。特定のファイルを選択してから、それらを新しいブランチに移動し、リモートでその新しいブランチにコミットしたいと思います。

上司から、実行git commit -pしてから保持したいものを確認し、どういうわけかそれを新しいブランチに追加してプッシュするようにアドバイスされました。私はこれを行う方法を理解するのに苦労しています。

4

4 に答える 4

3

最初に新しいブランチに切り替えます。

git checkout -b mynewbranch

次に、そのブランチに入れたくないファイルをすべて削除します。これが完了したら、次を実行します。

git add -u
git commit

最後に、新しいブランチをリモートにプッシュします。

git push origin mynewbranch 
于 2013-01-22T14:48:53.757 に答える
2

上司の推奨するアプローチは、同じファイル内に新しいブランチの変更と古いブランチの変更 (または破棄するものなど) が混在している場合にのみ意味があります。

それが事実であると仮定します:

  1. 作業コピーを変更せずに、新しいブランチを作成して切り替えます。

    git checkout -b mynewbranch
    

    ただし、何も削除しないでください。この段階で損失が発生する可能性があります

  2. 今のところ新しいブランチにのみ存在するはずの新しい(追跡されていない)ファイルを追加します

    git add <filenames>
    
  3. 新しいブランチに必要な変更を追加します

    git add --patch
    

    また

    git add --interactive
    

    正直に言うと、インタラクティブは少し練習が必要だといつも思います。それは最もフレンドリーなインターフェースではありません。

  4. インデックスを新しいブランチにコミットします。最初にレビューして、意味があることを確認できます

    git status
    git diff --cached
    git commit
    

    このブランチに追加しないことを選択した変更は、作業コピーにのみ存在することに注意してください

  5. 追加されていない、コミットされていない作業コピーの変更を持って、前のブランチに戻ります

    git checkout master
    
于 2013-01-22T15:00:10.887 に答える
0

これを実現するにはいくつかの方法があり、それぞれに長所と短所があります。

直接アプローチ

すでに説明したように、別のブランチに切り替え、不要なファイルを削除し、必要なファイルをコミットします。

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% 適合しない場合は、アプローチを組み合わせて必要なものを実現できます。

于 2013-01-22T15:18:17.737 に答える