git pushは、ローカルの変更があっても「すべてが最新」であると言います


238

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

しかし、今日、ローカルに変更を加えてローカルリポジトリにコミットしているにもかかわらず、実行git push origin masterすると「すべて最新」と表示さgit cloneれますが、リモートサーバー上のファイルのチェックアウトに使用すると、最新の変更が含まれていません。 。また、「master」というブランチと「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


あなたが正しいディレクトリにいることを再確認する価値があります!特に あなたはサブモジュールを持っているとき、あなたは親からのgitの応答を間違えることができます。..
geotheory

私の場合、commit気づかずにコードをプッシュしようとしたときにエラーが発生しました
Zohab Ali

3
コミットするのを忘れましたか?
ldgorman

回答:


256

万が一、取り外したヘッドで作業していますか?

のように:

分離した頭

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

警告:次の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 prunegit gc、ガベージコレクションすることができます。
これを誤って行った場合は、reflogにHEADの場所を尋ねることができます。たとえば、

$ git log -g -2 HEAD

4
どのようにしてこの状態になったのか(現時点ではgit-svnでいじくり回している)は完全には明らかではありませんが、これで私は正しい場所に戻るのに十分でした。ありがとう。
クリストファーシュミット

私は切り離された状態で、変更をマージし、変更をコミットしましたが、これをマスターにプッシュしたいのですができません-「すべて最新」と通知されます。しかし、私はGitlabが提供する指示に従いますStep 1: git fetch origin git checkout -b "nodeAPI" "origin/nodeAPI" Step 2. Review the changes locally Step 3. Merge and fix conflicts git fetch origin git checkout "origin/master" git merge --no-ff "nodeAPI" Step 4. Push the result of the merge to GitLab git push origin "master" 。最後のステップまでは問題ありませ ん。しかし、今、私はどう前進するか混乱しています。
John

@Johnプッシュするにはブランチにいる必要があります。デタッチされたHEADモードにいる限り、それは機能しません。ブランチを現在の場所にリセットしますgit branch -f myBranch HEAD。次に、そのブランチをチェックアウトしてプッシュします。あなたのケースでmyBranchmaster、あなたがマージの過程にあったのかもしれませんnodeAPI
VonC、

このコマンドを実行した後、すべてのローカル変更が失われることに注意してください!! このようなことをする前に、いくつかのgit stashとコードのバックアップを行うことを検討してください。
kta

@kta良い点:警告を表示するように回答を編集しました。
VonC

152

ええと。あなたがgit noobなら、あなたはgit commit前に持っていgit pushますか?初めてこの間違いをしました!


10
それはgit commit -a -m "your message goes here"私の場合
aexl

新しいプロジェクトをGitHubに追加したいときはいつも、私は大好きです(皮肉)。commitは、新しいバックアップリポジトリを作成して忘れたときにのみ起こります
Tom Stickel

ここでgit noob-プッシュする前に毎回コミットするのを忘れる-プッシュしていない場合、プッシュは自動的にコミットする必要がある
FoxMcCloud

2
@FoxMcCloudコミットを意識する重要なステップである、私はあなたがまだ:)〜していない場合は、あなたがそれを愛することを学ぶだろうよgit add -Agit diff --staged変更内容をスクロールは、非常に格好良いうーんgit commit -m 'bam!'git push
AFOC

58

たぶん、あなたは新しいローカルブランチをプッシュしていますか?

新しいローカルブランチは明示的にプッシュする必要があります。

git push origin your-new-branch-name

gitについてのそれらの1つだけ...リポジトリのクローンを作成し、ブランチを作成し、いくつかの変更をコミットし、プッシュします...「すべてが最新です」。なぜそれが起こるのか理解していますが、このワークフローは初心者には非常に不親切です。


3
ありがとう!これにより、私が持っていた新しいブランチで「すべて最新」の問題が修正されました
Pangu

「あなたの新しい支店名」が一体何を意味しているのですか?Ps:あなたは新人についてすごく正しいです。
www-0av-Com

@ user1863152は、作成した新しいローカルブランチの名前です。あなたはそれをしなかったように聞こえるので、ここで他の答えをチェックしてください。
Roman Starkov

「このワークフローは初心者には非常に不親切です」に完全に同意します。私は1時間以来これに苦労しています。リモートとローカルのリポジトリをセットアップしました。ローカルREAMEファイルに変更を加え、それをリモートにプッシュしようとしましたが、リモートでは何も変更されませんでした。
Virの


28

注意すべきもう1つの状況:gitのデフォルトの状態の一種は、「マスター」ブランチで作業していることです。そして、多くの状況では、メインの作業ブランチとしてその中でたむろします(一部の人々は空想を得て他のことをします)。

とにかく、それはただ1つのブランチです。だから私が得るかもしれない状況は:

私のアクティブなブランチは実際にはマスターブランチではありません。...しかし、私は習慣的に次のコマンドを実行しますgit push(以前に実行git push origin masterしたことがあるので、それがTHATのショートカットです)。

だから私は習慣的にマスターブランチを共有リポジトリにプッシュしています...おそらく私の場合はこれは良いクリーンなものです...

しかし、私が取り組んでいる変更がまだmasterブランチにないことを忘れてしまいました!!!

したがって、私がを試すたびにgit push、「最新のものすべて」が表示されたら、私は悲鳴を上げたいのですが、もちろん、それはgitのせいではありません。それは私のものです。

代わりに、ブランチをマスターにマージしてからプッシュを実行すると、すべてが再び幸せになります。


その後、私も叫びたかったが、その後、あなたがマスターにブラントをマージするために、救いの道を説いた、とgit push
Aaron C

16
$ git push origin local_branch:remote_branch

説明

私は同じエラーがあり、それを理解しようと何時間も費やしました。やっと見つけた。私が知らなかったのは、このようにgit push origin branch-xプッシュするとローカルでブランチxを検索してからリモートブランチxにプッシュすることです。

私の場合、2つのリモートURLがありました。ローカルからxリモートにyからpushしようとしたときに、branch-xからbranch-yにチェックアウトしました。

この種のトラップに陥らないようにするには、ソース参照とターゲット参照を指定する必要があります。

$ git push origin local_branch:remote_branch

更新:

ブランチをプッシュするたびにこのコマンドを実行する必要がある場合は、ローカルブランチとリモートブランチの間のアップストリームを次のように設定する必要がある場合があります。

$ git push --set-upstream origin local_branch:remote_branch

または

$ git push -u origin local_branch:remote_branch

'git pushアップストリームdev:master'これは、ソースをdevからマスターにプッシュすることを意味します。正しい?
Dhaduk Mitesh

これは私を助けました、私はリモートブランチと呼ばれる別のローカルブランチを持っていて、それが混乱を引き起こしました。
Hubert Kubiak

これは間違いなく私にとってはうまくいきますが、リモートに何かをプッシュしたいときはいつもこれをしなければなりません。どうすれば修正できますか?
SamuraiJack

remote_branch:$ gitのプッシュ--set-上流の原点local_branch:あなたは多分以下で、ローカル&リモートブランチ間の上流を設定する必要があります
Melchia

6

上記のVonCの回答を参照してください-追加の手順が必要でした:

$ 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 push remoterepo master 「エラー:一部の参照をプッシュできませんでした。履歴が失われないようにするために、非早送りの更新は拒否されました。リモートの変更(たとえば、「git pull」)をマージしてください。もう一度押す」

それで私は「git pull remoterepo master」を実行しましたが、競合が見つかりました。私がやったgit reset --hard <commit-id>バックアップフォルダに衝突したファイルをコピーし、再び、でしたgit pull remoterepo masterもう一度、戻って私のプロジェクトに衝突したファイルをコピーし、やったgit commit、そしてgit push remoterepo master、それは働いていたこの時間。

Gitは「すべてが最新のものである」と言うのをやめました-そして「早送り」について不平を言うのをやめました。


3

私も同じような状況に直面しています。変更を加えようとしたところ git push origin master、すべてが最新の状態でした。

私はgit add変更されたファイルをしなければなりませんでしたgit push origin master。それからそれは働き始めました。


4
git commitプッシュする前に、追加したファイルを使用する必要はありませんか?
David Harkness

3

あなたのgitステータスから、あなたはおそらく私のものとは異なる状況にあるでしょう。

しかし、とにかく、これが私に起こったことです。私は次のエラーに遭遇しました:

fatal: The remote end hung up unexpectedly
Everything up-to-date

ここでより有益なメッセージは、リモートが切断したことです。判明したのは、HTTPポストバッファサイズを超えたためです。解決策は、それを増やすことです

git config http.postBuffer 524288000


3

今日、私はこの問題を抱えていましたが、他の回答とは何の関係もありませんでした。ここに私がやったこととそれを修正した方法があります:

私のリポジトリは最近移動しましたが、ローカルコピーがありました。ローカルの「マスター」ブランチから分岐していくつかの変更を加えたところ、リポジトリが移動したことを思い出しました。以前git remote set-url origin https://<my_new_repository_url>は新しいURLを設定していましたが、プッシュすると、新しいブランチをマスターにプッシュするのではなく、「Everything up to date」と表示されます。

私は最終origin/master的に次のようにリベースし、明示的なブランチ名でプッシュすることで解決しました:

$ git rebase <my_branch> origin/master
$ git push origin <my_branch>

これが私の同じ問題を抱えていた人に役立つことを願っています!


3

超希少-しかしそれでも:Windowsでは、core.ignorecaseがtrueに設定されている場合、packed-refsには大文字と小文字が1つ含まれるブランチ(つまり、dev / mybranch)があり、refsフォルダーには別の大文字と小文字(つまり、Dev / mybranch)がある可能性があります。 。

解決策は、packed-refsから関連する行を手動で削除することです。よりクリーンなソリューションが見つかりませんでした。


それも私にとって問題でした。.gitフォルダー(logs / refs / heads、refs / heads)内の大文字と小文字が正しくないフォルダーの名前を変更してしまいました。
Alexey Solonets

2

Githubのブランチをマージしてローカルで開発し続けたとき、私はこれに遭遇しました。私の修正は、提案されている他の修正とは少し異なりました。

まず、古いローカルブランチから新しいローカルブランチを分岐しました(プッシュできませんでした)。次に、新しいローカルブランチをオリジンサーバー(Github)にプッシュしました。すなわち

$ git checkout -b newlocalbranch oldlocalbranch
$ git push origin newlocalbranch

oldlocalbranchではなくnewlocalbranchですが、Githubに変更が表示されます。


2

私の場合、2つのリモートリポジトリがありました。

git remote -v
originhttps https://asim_kt@...
originhttps https://asim_kt@...
origin  ssh:git@bitbucket.org:...
origin  ssh:git@bitbucket.org:...

両方のレポは同じでした。1つだけhttps他だったssh。したがって、不要なものを削除すると(私の場合は、機能しなかったためsshに使用したhttpsためssh!)、問題が解決しました。


2

私の間違いはこれまでに述べたすべてのものとは異なりました。なぜヘッドが分離しているのかわからない場合は、おそらくありません。私は自動操縦に取り組んでいたgit commitgit push、とからの出力を読んでいませんでしたgit commit。結局、私は-amを忘れたため、エラーメッセージでした。

[colin] ~/github/rentap.js [master] M % git commit 'figured out some more stuff with the forms in views and started figuring out row and mode in models so also made matching routes and controllers'
error: pathspec 'figured out some more stuff with the forms in views and started figuring out row and mode in models so also made matching routes and controllers' did not match any file(s) known to git.
[colin] ~/github/rentap.js [master] M % git push
Enter passphrase for key '/home/colin/.ssh/id_ecdsa': 
Everything up-to-date

-am私が通常行う場所に置くことでそれを修正しました:

[colin] ~/github/rentap.js [master] M % git commit -am 'figured out some more stuff with the forms in views and started figuring out row and mode in models so also made matching routes and controllers'

2

同じ問題に直面しています。ステージング領域に変更を加えなかったので。そして、私は直接コマンドを使用してリモートリポジトリにコードをプッシュしようとしました:

git push origin master

そして、それはメッセージを示していますEverything up-to-date

この問題を解決するには、次の手順を試してください

  1. git add .
  2. git commit -m "Bug Fixed"
  3. git push -u origin master

1

リモートURLを間違えていないことを確認します。

ローカルJenkinsビルド構成でGitをCVSとして有効にした後、これに遭遇したことについても言及したかっただけです。Jenkinsが私がブランチに与えた最新のコミットをチェックアウトし、リモートをリセットしてリポジトリに与えたパスに対応するように見えます。機能ブランチをもう一度チェックアウトして、 'git remote set-url'で元のリモートURLを修正する必要がありました。ビルドツールを作業ディレクトリに向けないでください。さもないと、時間がかかります。私のリモートは作業ディレクトリへのファイルパスに設定されていたので、同じソースと宛先で変更をプッシュしようとすると、自然にすべてが最新の状態で報告されました。


1

別の可能性として、除外された.gitignoreファイル内のディレクトリに名前を付けた可能性があります。そのため、新しいコミットはプッシュされません。「検索」を無視するディレクトリに名前を付けたのは偶然でしたが、それもソースツリーのディレクトリでした。


1

私が見つけた簡単な方法があります。.gitフォルダーに移動し、HEADファイルを開いて、ブランチをマスターに戻します。例:参照:refs/heads/master


実際に設定するとrefs/heads/master、リポジトリが壊れます。しかし、それをHEADコミットだと思ったものに設定すると、次のメッセージが表示されましたWarning: you are leaving 1 commit behind, not connected to any of your branches。コミットを新しいブランチに引き継ぎ、マスターにマージすることができました。
schmijos

1

同じ問題がありました。私の場合、同じリモコンに名前を付ける必要があったことが原因です。標準の「オリジン」を作成しましたが、「github」をリモコンとして長い間使用していたため、それもありました。「元の」リモートを削除するとすぐに、エラーはなくなりました。


1

私はこれを経験しました(gitがすべてが最新であると言ったにもかかわらず、私のgitログのコミットはGitHubにありませんでした)、問題はGithubであると確信しています。gitでエラーメッセージは表示されませんでしたが、GitHubにステータスエラーがあり、数時間後にコミットが発生しました。

https://status.github.com/messages

GitHubステータスメッセージは次のとおりです。

  • サービスが利用できないという報告を調査しています。
  • GitHub.comへのアクセスに関する問題を調査しています。
  • GitHub.comへのアクセスを復元するために、データストレージシステムをフェイルオーバーしています。

1

私のもう1つの非常に単純でありがたのない間違い:私-mはコミットにメッセージ修飾子を追加するのを忘れていました。だから私は書いた:

git commit 'My message'

正しい代わりに:

git commit -m 'My message'

注:エラーは発生しません。しかし、あなたはあなたのコミットをプッシュすることができず、Everything up to date代わりに常に得ることができません


0

ここでは、私の解決策は上記とは異なります。この問題がどのように発生するかはまだわかりませんが、修正しました。少し意外と。

今道が来る:

$ git push origin  use_local_cache_v1
Everything up-to-date
$ git status
On branch test
Your branch is ahead of 'origin/use_local_cache_v1' by 4 commits.
  (use "git push" to publish your local commits)
  ......
$ git push
fatal: The upstream branch of your current branch does not match
the name of your current branch.  To push to the upstream branch
on the remote, use

    git push origin HEAD:use_local_cache_v1

To push to the branch of the same name on the remote, use

    git push origin test
    
$ git push origin HEAD:use_local_cache_v1    
Total 0 (delta 0), reused 0 (delta 0)
remote:

私のために働くコマンドは

$git push origin HEAD:use_local_cache

(この問題をできるだけ早く解消してください)


0

私はそれが超古いことを知っていますが、私の場合、私はそれを非常に素早く修正しました。

先に1つのコミットをしているときに、同じエラーが発生しましたmaster。次に、現在のスタックオーバーフローの投稿を見つけました。しかし、提案されたアイデアを進める前に、私は新しいコミットを作成し、オリジンへのプッシュで再試行することを決めただけで、スムーズに機能しました。

理由はわかりませんが、他の人に役立つかもしれません。


それは実際には質問への答えを提供しません。十分な評判得ると、好きな回答賛成投票する特権が得られます。このようにして、質問の将来の訪問者はその回答の投票数が高くなり、回答者には評判ポイントが付与されます。投票が重要である理由をご覧ください。
Waqar UlHaq

1
わかりました。ありがとうございます。しかし、なぜ(あなたが望むなら)問題の「回避策」と見なすことができないのでしょうか。しかしそれは解決策ではありませんが、とにかくそれは他の人にとって有用でありえます。
Cisco

0

別の可能性は、プッシュしているディレクトリに影響を与えないコミットがあることです。だから私の場合、私は次のような構造を持っていました

- .git
- README.md
- client/
 - package.json
 - example.js
- api/
 - requirements.txt
 - example.py

そして私は、マスターの変更をコミット作られREADME.md、その後、走ったgit subtree push --prefix client heroku-client masterとメッセージが表示されましたEverything up-to-date


0

この不正なエラーが発生したとき、Jupyter-Notebookで作業していました。

上記の解決策では解決できませんでした。分離されたヘッドがなく、ローカルリポジトリとリモートリポジトリの名前異なっていたためです。

しかし、私が持っていたのは、ファイルサイズが1 MBをわずかに超え、最大サイズがほぼ2 MBであったことです。私が使用してファイルサイズを縮小どのように私は私のiPythonノートブックのファイルサイズを小さくすることができますか?技術。出力をクリアすることで、ファイルサイズを小さくすることができました。コードをプッシュすることができました。これにより、ファイルサイズがKB単位になります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.