[解決済み] 強制プッシュを必要とせずに git rebase を使用するにはどうすればよいですか?
質問
git nirvanaを達成するために、現在マージしている状況でrebaseを活用する方法を一日かけて勉強しているところです。
私が考えるgit 101の流れ(以下に綴ります)を実行するとき、私は以下のことをしなければなりません。
push --force
を実行し、変更をオリジンにプッシュしています。
私だけではないでしょう - この件が取り上げられていることは承知しています (
1
,
2
,
3
,
4
,
5
)、技術的な理由は理解しています。
なぜ
が必要な技術的な理由も理解しています。 私の問題はこれです --- rebase を賞賛する多くの (多くの) ブログ エントリがあり、それがいかに彼らの生活を変えたかについて述べています (
1
,
2
,
3
,
4
など) がありますが、いずれも
push --force
がフローの一部であることに言及しているものはありません。 しかし、既存の stackoverflow の質問に対するほぼすべての回答は、" Yeah, if you're gonna rebase, ya gotta use
push --force
を使用しなければなりません。
リベース擁護派の人数と宗教性を考えると push --force' を使うことはリベースフローの本質的な部分ではないと信じなければなりませんし、もし頻繁にプッシュを強制しなければならないなら、何か間違ったことをしているのだと思います。 .
push --force
は
悪いこと
.
では、私のフローを紹介します。 力を使わずに同じ結果を得るにはどうしたらいいでしょうか?
簡単な例
2つのブランチです。
- v1.0 - リリースブランチで、パッチのみを含む
- マスター - 次のメジャーリリースのためのすべてを提供します。
いくつかのパッチのコミットと次のリリースのためのコミットがあります。
次のリリースで失われないように、パッチを私のマスターに組み込みたいと思います。 プレエンライトメント私は単に。
git checkout master
git merge v1.0
しかし今、私は
git checkout master
git rebase v1.0
それで今、私はここにいます。
の時間です。
git push
ダイスはありません。
どのように解決するのですか?
リベースは素晴らしいツールですが、トピックブランチを master に高速にマージするために使用すると、最も効果的です。たとえば、add-new-widget ブランチを master に対してリベースすることができます。
git checkout add-new-widget
git rebase -i master
ブランチの master への fast-forward マージを実行する前に。例えば
git checkout master
git merge --ff-only add-new-widget
この利点は、履歴に複雑なマージコミットやマージ時の競合があまり発生しないことです。なぜなら、すべての変更はマージ前に master の先端にリベースされるからです。二次的な利点としては、リベースしたのに
git push --force
を使用する必要がないことです。なぜなら、master ブランチの履歴を破壊することがないからです。
これは確かにリベースの唯一の使用例ではなく、また唯一のワークフローでもありませんが、私が見た中ではより賢明な使い方のひとつです。YMMV。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] Git が追跡したファイルを .gitignore に登録したまま「忘れる」ようにするにはどうしたらいいですか?
-
[解決済み] git rebase の取り消し
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】ローカルの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 実装 サイバーパンク風ボタン
おすすめ
-
undefinedmaster -> master (non-fast-forward) と git ! [拒否] master -> master (フェッチファースト)
-
解决[email protected]。パーミッションが拒否されました (publickey)。リモートリポジトリから読み取れませんでした
-
git pushで "Updates were rejected because your current branch is behind "というエラーが報告される。
-
Git はファイル名の大文字と小文字を無視し、修正する
-
コミットには何も追加されないが、未追跡のファイルが存在する解決策
-
git push issues
-
git reports an error fatal: unable to auto-detect email address (got 'Administrator@MS-20180504MMDH.(none)')
-
[解決済み] GitHubのウェブサイト上でディレクトリやフォルダの名前を変更するには?
-
[解決済み] 別のユーザーでコードをコミットするにはどうすればよいですか?
-
[解決済み] 非標準のポートでリモートリポジトリを使用する