今回の課題
ローカルの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
ブランチのリモート追跡ブランチが設定されておらず、不具合が発生してしまった。
-
feature/1
ブランチにて$ git push origin main
を実行。(ここでリモート追跡ブランチを設定し忘れている) -
feature/2
ブランチに切り替えて作業をして$ git push origin main
を実行。 -
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したいリモートリポジトリが設定できたいたので問題がなかった。