LoginSignup
3
3

【コード管理/GitHub】git pushしてもEverything up-to-dateと言われてリモートリポジトリにpushできない

Last updated at Posted at 2023-08-19

今回の課題

ローカルのfeature/1ブランチ内でコードを変更して以下のコマンドを実行したのだが、
Everything up-to-dateと言われてしまい、リモートリポジトリに変更したコードを反映させることができなかった。

$ git add .
$ git commit -m "message"
$ git push origin main

$ git logでファイルの変更がcommitできていることが確認することができたので、$ git pushがうまく実行できていないことが原因のようだった。

解決策

結論から言うと、以下のコマンドを実行することで解決することができた。
以下のコマンドは、ローカルブランチ(feature/1ブランチ)のリモート追跡ブランチを設定している。

# リモート追跡ブランチを設定
$ git branch -u origin/feature/1
# git branch -u <リモート追跡ブランチ>

# リモート追跡ブランチを設定してからpushする
$ git add .
$ git commit -m "message"
$ git push origin main

なぜ上記の方法で解決できたのか

今回不具合が発生した原因としては、feature/1ブランチのリモート追跡ブランチを設定していなかったことだった。
そのため、リモート追跡ブランチの設定をしてからgit pushすることで解決することができた。

リモート追跡ブランチを設定するには、上記のようなコマンドを実行してリモート追跡ブランチを設定するか、
最初にリモートリポジトリにプッシュするときに、$ git push -u origin <リモート追跡ブランチ>というコマンドを実行する必要がある。

不具合を発生させてしまうまでの経緯

以下の流れで進めてしまったことで、
feature/1ブランチのリモート追跡ブランチが設定されておらず、不具合が発生してしまった。

  1. feature/1ブランチにて$ git push origin mainを実行。(ここでリモート追跡ブランチを設定し忘れている)
  2. feature/2ブランチに切り替えて作業をして$ git push origin mainを実行。
  3. feature/1ブランチに切り替えて作業をして$ git push origin mainを実行。←ここでEverything up-to-dateが発生

上記だと、各ローカルリポジトリに、リモート追跡ブランチが設定されていない。
リモート追跡ブランチの設定ができていない状況でブランチを切り替えて作業してしまったことで、
feature/1ブランチに戻して$ git push origin mainを実行しても、
feature/1ブランチがどのリモートリポジトリにpushすればいいのか分からなくなってしまっていた。

不具合を発見した方法

今回は、リモート追跡ブランチを確認するコマンドを実行して、不具合を発見することができた。
git branch -vvを実行することで追跡しているリモートブランチを確認することができる。

例えば、今回の件は以下のように、mainブランチにはorigin/mainを追跡するように設定されていたが、
feature/1ブランチとfeature/2ブランチに追跡するリモートリポジトリが指定されていない状態となっていた。

feature/2            99630ef (git commit時のmessage文)
feature/1            b4cb9e2 (git commit時のmessage文)
main                 99630ef [origin/main] (git commit時のmessage文)

そこで、$ git branch -u origin/feature/1コマンドを実行することで、
以下のようにfeature/1が追跡するリモート追跡ブランチが設定することができる。

feature/2            99630ef (git commit時のmessage文)
feature/1            b4cb9e2 [origin/feature/1](git commit時のmessage文)
main                 99630ef [origin/main] (git commit時のmessage文)

まとめ

複数のブランチを切り替えて異なる作業をする場合、
リモート追跡ブランチを設定するのを忘れないようにしないと、git pushができなくなってしまう。

おまけ:他に試したこと

リモートリポジトリを確認

以下のコマンドを実行して、$ git push origin mainしている先が、意図しているリモートリポジトリになっているかの確認をした。

$ git remote -v

こちらのコマンドを実行すると以下のように返ってくるので、
ここでoriginにgit pushしたいリモートリポジトリが設定されているか確認をした。

origin    git@github.com:********.git (fetch)
origin    git@github.com:********.git (push)

※今回はoriginにpushしたいリモートリポジトリが設定できたいたので問題がなかった。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3