[解決済み] git mergeです。残しておきたいファイルを削除する
2023-08-28 06:32:40
質問
git で 2 つのブランチをマージするにはどうすればよいのでしょうか。 必要な ファイルを残すにはどうしたらよいでしょうか?
2 つのブランチをマージするとき、あるブランチでファイルが削除され、別のブランチでは削除されなかった場合、そのファイルは最終的に削除されます。
たとえば
- 新しいブランチを作成したときに、masterにファイルが存在する場合
- そのファイルは(まだ)必要ないので、master から削除します。
- 機能を追加するためにブランチに変更を加える。 このファイルが存在することに依存している
- マスターでバグフィックスを行う場合 (破棄できません)
- ある日マージしたら、ファイルが消えていた
再現する方法
-
1つのファイルでgit repoを作成します。
git init echo "test" > test.txt git add . git commit -m "initial commit"
-
ブランチの作成
git branch branchA
-
マスターのファイルを削除する
git rm test.txt git commit -m "removed file from master"
-
削除されたファイルに触れないように、branchAで任意の変更を行います(Conflictを避けるため、変更されていない必要があります)。
git checkout branchA touch something.txt git add . git commit -m "some branch changes"
ここから、これら 2 つのブランチをマージするために私が見つけたどのような方法でも、test.txt ファイルは削除されます。 仮に私たちが
ファイルに依存していたとすると
に対して
branchA
に依存している場合、これは大きな問題です。
失敗例です。
マージ1
git checkout branchA
git merge master
ls test.txt
マージ2
git checkout master
git merge branchA
ls test.txt
リベース1
git checkout branchA
git rebase master
ls test.txt
どのように解決するのですか?
これは興味深い問題です。というのも、あなたがファイルを削除した後
BranchA
が作成された後にファイルを削除し、その後
master
を
BranchA
に変更した場合、Gitがどのように競合に気づくのかがわかりません。
悪いマージの後、アンドゥして再マージすることができますが、ファイルを追加し直してください。
git checkout HEAD@{1} .
git merge --no-commit master
git checkout master test.txt
git add test.txt
git commit
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] git rebase の取り消し
-
[解決済み] Git リポジトリで削除されたファイルを検索して復元する方法
-
[解決済み] Git フェッチ リモートブランチ
-
[解決済み] Gitブランチをmasterにマージする最も良い(そして最も安全な)方法は何ですか?
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
GitのPlease enter a commit messageで、このマージが必要な理由を説明してください。
-
[解決済み] コミットに含まれるすべてのファイルを一覧表示するにはどうすればよいですか?
-
git push please tell me who you are or git fatal: empty ident name (for <>) not llowed.
-
[解決済み] バージョン管理には、なぜタグとリリース/ベータブランチを使い分ける必要があるのでしょうか?
-
[解決済み] Git のリモート HEAD を master 以外に指定するように変更する
-
[解決済み] IntelliJのShelveとGit stashの違いは何ですか?
-
[解決済み] Git git reset」後にコミットメッセージを再利用/保持するには?
-
[解決済み] ローカルレポとリモートレポを接続する
-
[解決済み] gitで、stashを適用せずに、追跡されていないstashedファイルを表示する方法はありますか?
-
[解決済み] Git Interactive Merge?