1. ホーム
  2. git

[解決済み】ローカルに変更があるにもかかわらず、git pushが「すべて最新」と言う

2022-02-11 17:43:43

質問

私はリモートの gitosis サーバーとローカルの git リポジトリを持っていて、自分のコードに大きな変更を加えるたびに、その変更もそのサーバーにプッシュすることにしています。

しかし今日、ローカルで変更を加え、ローカルリポジトリにコミットしても git push origin master と表示され、「すべて最新です」と表示されます。 git clone を使用してリモートサーバー上のファイルをチェックアウトすると、最新の変更が含まれていません。そして、私は "master" という名前の一つのブランチと "origin" という名前の一つのリモートサーバーだけを持っています。

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

解決方法は?

を使用していますか? 分離型ヘッド もしかして

というように。

は、最新のコミットがブランチヘッドでないことを示します。

警告 : 以下では 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コマンドを使用することができます。
を使用することができます。 git reset --hard $othercommit をさらに移動させるなど。
デタッチした HEAD の上に変更を加えて新しいコミットを作成することができます。 .
を使用してマージを作成することもできます。 git merge $othercommit .

HEADが切り離されている間の状態は、どのブランチにも記録されません(これは自然なことです---あなたはどのブランチにもいません)。
これは何を意味するかというと 既存のブランチに戻ることで、一時的なコミットやマージを破棄することができます。 (例 git checkout master を使用し、後で git prune または git gc がゴミとして回収してしまう。
間違えてやってしまった場合は、reflogにHEADの場所を聞くことができます、例えば。

$ git log -g -2 HEAD