[解決済み] Gitによるhotfixブランチのfeatureブランチへのマージ
質問
例えば、Gitで次のような状況があるとします。
-
作成されたリポジトリ。
mkdir GitTest2 cd GitTest2 git init
-
マスターでいくつかの変更が行われ、コミットされます。
echo "On Master" > file git commit -a -m "Initial commit"
-
Feature1 は master からブランチされ、いくつかの作業が行われました。
git branch feature1 git checkout feature1 echo "Feature1" > featureFile git commit -a -m "Commit for feature1"
-
一方、マスターコードにバグが発見され、hotfix-branchが確立される。
git checkout master git branch hotfix1 git checkout hotfix1
-
このバグは hotfix ブランチで修正され、(おそらくプルリクエストやコードレビューの後に) master にマージされます。
echo "Bugfix" > bugfixFile git commit -a -m "Bugfix Commit" git checkout master git merge --no-ff hotfix1
-
feature1の開発を続けています。
git checkout feature1
例えば、featureブランチでもバグが発生しているため、featureブランチにホットフィックスが必要だとします。どうすれば、featureブランチにコミットを重複させることなく、この問題を解決できますか?
featureブランチに、機能の実装とは関係のない2つの新しいコミットが入るのを防ぎたいのですが。これは、プルリクエストを使う場合に特に重要だと思います。これらのコミットはすべてプルリクエストに含まれ、レビューされなければなりませんが、これはすでに行われています(ホットフィックスがすでにマスターに含まれているため)。
をすることができません。
git merge master --ff-only
: "fatal: Not possible to fast-forward, aborting."ですが、これが役に立ったかどうかはわかりません。
解決方法は?
masterブランチをfeatureブランチにマージする方法は?簡単です。
git checkout feature1
git merge master
ここで無理に早送りマージを行うことはできないので、意味がありません。あなたは feature ブランチと master ブランチの両方にコミットしました。早送りはもう不可能です。
をご覧ください。 GitFlow . これはgitのブランチングモデルで、それに従うことができます。また、これはGitの拡張機能で、新しいワークフローのステップのためにいくつかのコマンドを追加し、そうでなければ手動で行う必要があったことを自動的に行うものです。
では、あなたのワークフローでは何が正しかったのでしょうか?feature1 ブランチは、GitFlow では基本的に "develop" ブランチとして扱われます。
masterからhotfixブランチを作成し、それをマージして戻しました。そして今、あなたは立ち往生しています。
GitFlow のモデルでは、hotfix も開発ブランチにマージするよう求めています。
ということで、本当の答えはこうなります。
git checkout feature1
git merge --no-ff hotfix1
これは、Hotfix 内で行われたすべての変更を feature ブランチに追加するものですが のみ これらの変更は これらの変更はブランチ内の他の開発用変更と衝突する可能性がありますが、最終的に feature ブランチを master にマージする際には master ブランチと衝突することはありません。
リベースには十分注意してください。リベースは、あなたが行った変更があなたのリポジトリにとどまる場合にのみ行ってください。例えば、他のリポジトリにブランチをプッシュしていない場合です。リベースは、ローカルでのコミットを世に送り出す前に有用な順序に並べるための素晴らしいツールです。しかし、後からリベースを行うと、あなたのような git 初心者にとっては物事がめちゃくちゃになります。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] Git リポジトリでのマージの衝突を解決するには?
-
[解決済み] git rebase の取り消し
-
[解決済み] Gitブランチをmasterにマージする最も良い(そして最も安全な)方法は何ですか?
-
[解決済み] Git で最新のコミットを新しいブランチに移動する
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
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:コミットに何も追加されていないが、未追跡のファイルが存在する
-
[解決済み】gitがローカルバージョンをリモートバージョンに置き換える
-
[解決済み】fatal: 有効なオブジェクト名ではない: 'master'
-
[解決済み】「オリジン/マスターへのプッシュが拒否されました」というエラーが常に発生するのはなぜですか?
-
[解決済み] リモートの <ブランチ名> とマージするように設定されていますが、そのような参照は取得されませんでしたか?
-
[解決済み] GitHubに空のブランチを作成する
-
[解決済み] ブラウンアウトの一環として、パスワード認証が一時的に無効になっています。代わりに個人用アクセストークンを使用してください[重複]。
-
[解決済み] fatal: bad revision "とはどういう意味ですか?
-
[解決済み] Gitにおいて、origin/masterとorigin masterの違いは何ですか?
-
[解決済み] Gitブランチをmasterにマージする最も良い(そして最も安全な)方法は何ですか?