Git のヒント、他のブランチから個々のファイルまたはフォルダーをマージする方法

実際の業務では、大規模なプロジェクトやバージョンの繰り返しでは一度にオンライン化せず、複数回に分けてオンライン化する場合があり、その際には複数のブランチを作成して個別に開発することになります。

ブランチを作成する

この関数は、A と B という 2 つの分岐に分かれています。
Aには一覧ページ機能、
Bには詳細ページ機能、システムメッセージ機能があります

プロダクトマネージャーはリスト機能を先に立ち上げるべきだと言っていたので、Aブランチを開発し、リスト機能はすぐに開発されました。
2 日目、B ブランチは常識に従って開発されましたが、開発の途中でプロダクト マネージャーから、現在のシステムのメッセージ機能を早急に起動する必要があるため、リスト機能と一緒に起動する必要があると言われました。システムメッセージ関数は開発完了後、ブランチ上でリスト関数とシステムメッセージ関数をテストする必要がありますが、その際にブランチマージが役に立ちます。

ブランチをマージする

ブランチをマージするには git merge コマンドを使用するのが一般的ですが、 git merge マージでは 2 つのブランチの内容が完全にマージされてしまい、一部をマージしたい場合は絶対に機能しません。それではどうすればいいでしょうか?

指定したファイルを他のブランチから現在のブランチにマージするには、git checkout が適したツールです。

git checkout source_branch <path>...

強制合併

git checkout を使用して、B ブランチのシステム メッセージ関数を A ブランチに追加します。

$ git branch
  * A  
    B
    
$ git checkout B message.html message.css message.js other.js

$ git status
# On branch A
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#    new file:   message.css
#    new file:   message.html
#    new file:   message.js
#    modified:   other.js
#

マージが完了しました

注: git checkout を使用して現在のブランチにファイルを送信すると、現在のブランチの対応するファイルが強制的に上書きされます。

ここで新しいファイルを追加しても問題ありませんが、ブランチ A にある元の other.js が強制的に上書きされてしまい、ブランチ A にある other.js を変更すると、チェックアウト時に other.js の内容が強制的に上書きされてしまい、間違いなく問題が発生します。無理です。強制的でない補償を回避する方法については、以下を参照してください。

スマートマージ

1. git checkout を使用すると、A ブランチへの影響を避けるために、A ブランチに基づいて A_temp ブランチが作成されます。

$ git checkout -b A_temp
Switched to a new branch 'A_temp'

2. B ブランチを A_temp ブランチにマージします。

$ git merge B
Updating 1f73596..04627b5
Fast-forward
 message.css                     | 0
 message.html                    | 0
 message.js                      | 0
 other.js                        | 1 +
 4 files changed, 1 insertion(+)
 create mode 100644 message.css
 create mode 100644 message.html
 create mode 100644 message.js

3. A ブランチに切り替え、git checkout を使用して、A_temp ブランチ上のシステム メッセージ関数関連のファイルまたはフォルダーを A ブランチに上書きします。

$ git checkout A
Switched to branch 'A'

$ git checkout A_temp message.html message.css message.js other.js

$ git status
# On branch A
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#    new file:   message.css
#    new file:   message.html
#    new file:   message.js
#    modified:   other.js
#

はい、終わりました。これは仕事で git merge を使用した経験です。参考までに。間違いがあればご指摘ください。ありがとうございます。

おすすめ

転載: blog.csdn.net/weixin_44786530/article/details/130719391