17

Git を使用して、あるブランチから別のブランチに変更を選択的に適用することは可能ですか?

具体的には、devGitHub にはパブリック ブランチを使用し、masterデプロイにはプライベート ブランチを使用しています。1 つのブランチに変更が加えられた場合、それらを他のブランチに適用する必要がありますが、一部のコード行は異なるままにしておく必要があります。私の場合、いくつかの CSS クラスとフィードです。

私はGitを初めて使用しますが、調査を行いました:

  • git merge --no-commit --no-ffの後に a を使用してgit mergetool、競合が発生した場合に必要なものを選択できます。問題は、Git が自動的にマージできない競合に対してのみ機能することです。そのため、マージツールを使用する機会を得る前に、異なるままにしたいものが置き換えられます。

  • git difftool --cached違いを確認できるので便利ですが、mergetoolのように単純に選択して保存することはできないため、そこから保持したいものをコピーして手動でテキストエディターに置き換える必要があります.

  • git cherry-pick特定のコミットを別のコミットに適用しているように見えますが、異なるままにしたいものが別のコミットに散在している可能性があり、これらのコミットには異なるままにしたいものだけが含まれているわけではありません。何百万回もコミットしない限り、これが機能しているとは思えません。

また、明確にするために、あるブランチが別のブランチになることを望んでいません。これは、マージの場合のようです。それぞれの違いを持つ 2 つの別々のブランチが必要で、一方から他方に変更を適用します。

変更を適用し、いくつかの違いを維持することで、開発バージョンと展開バージョンを維持できる、より良いワークフローはありますか? 解決策につながる場合は、別のリポジトリや別のツールを使用してもかまいません。

4

3 に答える 3

19

パッチ適用についても知りました:

パッチを作成するには:git diff dev > master.patch

それを適用するには:patch < master.patch

于 2014-03-13T20:32:40.030 に答える
4

同じファイルからコミットの一部を選択する方法はないと思います。そのような部分を別のファイルに移動するには、コードを単純にリファクタリングする必要があると思います。

ところで、コミットからいくつかのファイルを取得したい場合は、こちらで説明されているように、cherry-pick を他のコマンドと組み合わせて使用​​できます。

于 2014-03-13T10:34:30.583 に答える