私はリモートの gitosis サーバーとローカルの git リポジトリを持っており、コードに大きな変更を加えるたびに、そのサーバーにも変更をプッシュします。
しかし、今日、ローカルでいくつかの変更を行ってローカル リポジトリにコミットしたにもかかわらず、実行時にgit push origin master
「すべてが最新です」と表示されるものの、git clone
リモート サーバーでファイルをチェックアウトすると、最新の変更が含まれていないことに気付きました。また、「master」という名前のブランチが 1 つと、「origin」という名前のリモート サーバーが 1 つしかありません。
PS: これはgitが実行中に表示されるものですls-remote
が、役立つかどうかはわかりません
$ git ls-remote origin
df80d0c64b8e2c160d3d9b106b30aee9540b6ece HEAD
df80d0c64b8e2c160d3d9b106b30aee9540b6ece refs/heads/master
$ git ls-remote .
49c2cb46b9e798247898afdb079e76e40c9f77ea HEAD
df80d0c64b8e2c160d3d9b106b30aee9540b6ece refs/heads/master
df80d0c64b8e2c160d3d9b106b30aee9540b6ece refs/remotes/origin/master
3a04c3ea9b81252b0626b760f0a7766b81652c0c refs/tags/stage3
ベストアンサー1
あなたは切り離された頭部もしかして?
例えば:
最新のコミットがブランチ ヘッドではないことを示します。
警告:以下はgit reset --hard
: 必ず使用してくださいgit stash
現在変更されているファイルを保存する場合は、まず を実行してください。
$ git log -1
# note the SHA-1 of latest commit
$ git checkout master
# reset your branch head to your previously detached commit
$ git reset --hard <commit-id>
前述の通り、git checkout
マニュアルページ(強調は筆者による):
ブランチの先端ではないコミットをチェックアウトできると便利な場合があります。
最もわかりやすい例は、次のようにタグ付けされた公式リリース ポイントでコミットをチェックアウトすることです。
$ git checkout v2.6.18
以前のバージョンの git ではこれは許可されておらず、 オプションを使用して一時ブランチを作成するように求められていました
-b
が、バージョン 1.5.0 以降では、上記のコマンドは現在のブランチから切り離しHEAD
、タグで指定されたコミット(v2.6.18
上記の例では ) を直接ポイントします。この状態では、すべての git コマンドを使用できます。たとえば、 を
使用してさらに移動できます。変更を加えて、切り離された HEAD の上に新しいコミットを作成できます。を使用してマージを作成することもできます。git reset --hard $othercommit
git merge $othercommit
HEADが切り離されている間の状態は、どのブランチにも記録されません(これは当然です --- どのブランチにもいないのです)。
つまり、既存のブランチ(例)に戻って一時的なコミットやマージを破棄することができgit checkout master
、その後git prune
または でgit gc
それらをガベージコレクションすることができます。
これを誤って行った場合は、reflogで自分がいた場所のHEADを問い合わせることができます。例:$ git log -g -2 HEAD
git push
「すべてが最新」と書かれていますが、技術的には分離されたHEADをプッシュすることもできます。コメントによるジョナサン・ベン
git push origin HEAD:main
ソースはブランチではなく、上流のターゲット ブランチがないため、宛先ブランチを指定する必要があります。