HOWTO · Git
Git Push --force-with-lease と Git Push --force の比較
この記事では、git push--force-with-lease コマンドと gitpush--force コマンドの違いについて説明します。
このページの内容
この記事では、git push --force-with-lease コマンドと git push --force コマンドの違いについて説明します。通常、git push コマンドを使用して、ローカルの変更をリモートリポジトリに公開します。
先に進んで、これらのコマンドを調べてみましょう。
git push --force コマンド
ローカルの変更をリモートリポジトリに公開するときは、次のコマンドを実行します。
$ git push origin
ただし、複数の開発者がリモートリポジトリを共有し、変更をリモートリポジトリに公開する場合、Git はプッシュを拒否できます。
Git にコミットを公開させるには、以下に示すように、--force フラグを git push コマンドに追加します。
$ git push --force origin
このコマンドを使用することの欠点は、他の開発者によってリモートリポジトリにプッシュされた変更を考慮しないことです。このコマンドは、ローカルリポジトリの状態に基づいてリポジトリを上書きします。
これは、プロジェクトのタイムラインを台無しにする可能性があるため、危険な場合があります。変更をリモートリポジトリにプッシュし、他の開発者が行った変更を保持したい場合は、次のようにします。
git push --force-with-lease コマンド
このコマンドは、複数の開発者がリモートリポジトリを共有している場合に便利です。他の開発者によってプッシュされた変更を破棄しないように、変更を公開するときに使用します。
$ git push --force-with-lease origin
例を見てみましょう。これがリモートリポジトリの現在の状態です。
README.md ファイルにいくつかの変更を加え、GitHub を使用したまま変更をコミットします。概説されているコミット ID 097ab8b に注意してください。
これが今の様子です。
コミット ID ba29c53 に注意してください。
ここで、コンピューターで README.md ファイルを開き、さらに編集を加え、変更をコミットして、git push を試行します。
コミット履歴が異なるため、Git はプッシュの試行を拒否しました。git push --force コマンドを実行できますが、これにより、GitHub で行った変更が破棄されます。
以下に示すように、git push --force-with-lease を実行できます。
$ git push --force-with-lease
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 314 bytes | 314.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To https://github.com/Wachira11ke/Delftscopetech.git
+ b7b8e6a...8ddd086 main -> main (forced update)
git push --force-with-lease と git push --force の違いは結果です。lease を使用して変更をプッシュすると、他の開発者によってプッシュされた変更を破棄しないようにすることができます。