[解決済み] 誰かが公開ブランチにリベースやリセットをプッシュした後、どのように回復/再同期しますか?
質問
公開した作品をリベースしてはいけない、危険だ、などという話を聞いたことがあります。しかし、リベースが行われた場合にどのように対処するかについて、レシピが投稿されているのを見たことがありません。 は が公開された場合にどのように対処するかについてのレシピは投稿されていません。
リベースやリセットをプッシュした人が、次回フェッチするときに注意を払う必要があることを他の全員に知らせることができるようにです。
私が見たことのあるひとつの明白な解決策は、ローカルコミットがないときに
foo
にローカルコミットがなく、それがリベースされた場合に有効です。
git fetch
git checkout foo
git reset --hard origin/foo
これは単に
foo
のローカルな状態を捨て、リモートリポジトリの履歴を優先します。
しかし、そのブランチ上でかなりのローカルな変更をコミットしていた場合、どのように対処するのでしょうか?
どのように解決するのでしょうか?
プッシュされたリベースの後に同期を取り戻すのは、ほとんどの場合それほど複雑なことではありません。
git checkout foo
git branch old-foo origin/foo # BEFORE fetching!!
git fetch
git rebase --onto origin/foo old-foo foo
git branch -D old-foo
つまり、まずリモートブランチが元々あった場所をブックマークしておき、それを使ってその時点からのローカルコミットをリベースされたリモートブランチに再生するのです。
リベースは暴力のようなものです。それが問題を解決しないなら、もっと必要なだけです。
もちろんブックマークがなくても、リベース前を調べれば可能です
origin/foo
のコミット ID を調べて、それを使えば。
これはまた、ブックマークを作り忘れた場合の対処法でもあります。 の前に を忘れてしまった場合の対処法でもあります。リモートブランチの reflog をチェックすればよいだけなので、何も失われることはありません。
git reflog show origin/foo | awk '
PRINT_NEXT==1 { print $1; exit }
/fetch: forced-update/ { PRINT_NEXT=1 }'
これは、コミットIDを表示します。
origin/foo
が指したコミット ID を表示します。
そうすると、単純に
git rebase --onto origin/foo $commit foo
関連
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] ファイルをリセットしたり、特定のリビジョンに戻したりするにはどうすればよいですか?
-
[解決済み] 新しいローカルブランチをリモートの Git リポジトリにプッシュし、それを追跡するにはどうすればよいのでしょうか?
-
[解決済み] Git のリモートブランチを作成する方法を教えてください。
-
[解決済み] Git で現在のブランチ名を取得するには?
-
[解決済み] detached HEADとmaster/originの連携はどうすればいいですか?
-
git push please tell me who you are or git fatal: empty ident name (for <>) not llowed.
-
[解決済み】ローカルリポジトリのブランチをリセットして、リモートリポジトリのHEADと同じにする
-
[解決済み】ローカルの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 occurs このリポジトリで別のgitプロセスが動作しているようです。例えば、.NETで開いたエディタなど。エラー
-
解決策正しいアクセス権を持っていることと、リポジトリが存在することを確認してください。
-
Git: bash: cd: 引数が多すぎる
-
[解決済み] 既存の、プッシュされていないコミットメッセージを修正するには?
-
[解決済み] ローカルとリモートの Git リポジトリの master ブランチの名前を変更する
-
[解決済み] Gitでは、これらの言葉はどのような意味ですか?リポジトリ、フォーク、ブランチ、クローン、トラック?
-
[解決済み] Git のリモート HEAD を master 以外に指定するように変更する
-
[解決済み] VSCodeからgitの統合を削除する
-
[解決済み] GitHubのウェブサイト上でディレクトリやフォルダの名前を変更するには?