git pushは何もしません(すべて最新のものです)


100

GitHubのGitリポジトリを更新しようとしています。私はたくさんの変更を加え、それらを追加し、コミットしてからを実行しようとしましたgit push。応答から、すべてが最新であることがわかりますが、明らかに最新ではありません。

git remote show origin

私が期待するリポジトリで応答します。

リポジトリに表示されないローカルコミットがある場合、Gitはリポジトリが最新であると通知するのはなぜですか?

  [searchgraph]  git status
# On branch develop
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       Capfile
#       config/deploy.rb
nothing added to commit but untracked files present (use "git add" to track)

  [searchgraph]  git add .

  [searchgraph]  git status
# On branch develop
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   Capfile
#       new file:   config/deploy.rb
#

  [searchgraph]  git commit -m "Added Capistrano deployment"
[develop 12e8af7] Added Capistrano deployment
 2 files changed, 26 insertions(+), 0 deletions(-)
 create mode 100644 Capfile
 create mode 100644 config/deploy.rb

  [searchgraph]  git push
Everything up-to-date

  [searchgraph]  git status
# On branch develop
nothing to commit (working directory clean)

回答:


142

git pushすべてのローカルブランチをプッシュするのではなく、どのリモートブランチにプッシュするかをどのようにして知るのでしょうか。特定のリモートブランチにプッシュするように構成されているローカルブランチのみをプッシュします。

私のバージョンのGit(1.6.5.3)では、実行するgit remote show originと、実際にプッシュ用に構成されているブランチが出力されます。

Local refs configured for 'git push':
  master pushes to master (up to date)
  quux   pushes to quux   (fast forwardable)

Q.しかしmaster、このことを心配することなくプッシュできました。

するとgit clone、デフォルトでは、ローカルmasterブランチがリモートのmasterブランチ(ローカルではと呼ばれますorigin/master)にプッシュするように設定されます。そのため、でのみコミットする場合master、単純なgit push変更では常に変更がプッシュされます。

ただし、投稿した出力スニペットから、というブランチに移動developしています。これは、何かにプッシュするように設定されていないようです。したがってgit push、引数がないと、そのブランチでコミットがプッシュされません。

「すべて最新」と表示されている場合、「プッシュ方法を教えてくれたすべてのブランチが最新である」という意味です。

Q.では、どうすればコミットをプッシュできますか?

変更をからdevelopに変更するorigin/master場合は、おそらくそれらをローカルにマージしてmasterからプッシュする必要があります。

git checkout master
git merge develop
git push             # will push 'master'

とはdevelop別に、リモートにブランチを作成する場合はmaster、引数をgit push次のように指定します。

git push origin develop

それは:と呼ばれるリモート上に新しいブランチを作成しますdevelop。そして、あなたの地元での日付にその枝を持ち出すdevelop支店; そして、セットdevelopにプッシュするorigin/developので、将来的には、そのgit push引数はなしますプッシュしdevelop、自動的に。

ローカルdevelopをとは異なる リモートブランチにプッシュする場合はdevelop、次のように言うことができます。

git push origin develop:something-else

ただし、そのフォームは将来develop常にプッシュするようには設定されませんorigin/something-else。ワンショットの操作です。


どうもありがとうございました。あなたのgit push originが開発されました:何か他のものが私がしばらくの間得ることができなかった質問に答えを与えました。
— Antroid 2017

1
私の場合、git push origin xブランチxが将来プッシュされるように設定されていませんでした。.gitconfig [remote "origin"]gitの動作を引き起こしていたセクションの特定のpushspec が原因でした。
— ラマン

27

これは、ステージング中にSourceTreeアプリケーションがクラッシュしたときに起こりました。そして、コマンドラインでは、以前のものgit addは破損しているように見えました。この場合は、次のことを試してください。

git init
git add -A
git commit -m 'Fix bad repo'
git push

最後のコマンドで、ブランチを設定する必要がある場合があります。

git push --all origin master

分岐やそのようなことを何も行っていない場合は、これで十分です。その場合は、のように正しいブランチにプッシュしてくださいgit push origin develop。


15

試してください:

git push --all origin

これにより、コミットが1つのブランチからマスターにではなく、リポジトリの別々のブランチにプッシュされます。
— Sreedevi J、2015

13

最後のコミットに移動してから実行してくださいgit push origin HEAD:master。


1
これは実際に機能しました。なぜ機能したのか説明してください。
— ルネNyffenegger

ドキュメントからのテキスト:Push the current branch to the remote ref matching master in the origin repository. This form is convenient to push the current branch without thinking about its local name.
— uruapanmexicansong 2017

私のためにも働いた
— ジェラド・ルトナム

私は私のリポジトリがどのように構成されているかを比較し、すべてのブランチが同じに見えました。それでも、1つのブランチでは単純にgit push:/を使用することはできませんでしたgit push origin HEAD:my_branch_name。
— iaforek

6

私の場合、他の解決策はどれもうまくいきませんでした。新しい変更されたファイル(で表示git status)のバックアップを作成し、を実行する必要がありましたgit reset --hard。これにより、リモートサーバーと再調整できました。新しい変更されたファイルを追加して実行する

git add .
git commit -am "my comment"
git push

トリックをしました。「最後のチャンス」の解決策として、これが誰かの役に立つことを願っています。


4

現在、開発ブランチにいるようです。あなたの起源に開発ブランチがありますか?そうでない場合は、お試しくださいgit push origin develop。git pushあなたのオリジンの開発ブランチを知ったら動作します。

詳細については、git-pushのmanページ、特に例のセクションを参照してください。


3

具体的には、マスターに何かをマージする場合は、以下の手順に従います。

git add --all // If you want to stage all changes other options also available
git commit -m "Your commit message"
git push // By default when it clone is sets your origin to master or you would have set sometime with git push -u origin master.

プルリクエストモデルの一般的な方法は、新しいローカルブランチに作成し、そのブランチをリモートにプッシュすることです。そのためには、変更をリモートでどこにプッシュしたいかを言及する必要があります。プッシュ時にリモートに言及することでこれを行うことができます。

git push origin develop // It will create a remote branch with name "develop".

ローカルブランチ名以外のブランチを作成する場合は、次のコマンドを使用して作成できます。

git push origin develop:some-other-name

2

サム・ストークスに感謝します。彼の回答によると、別の方法で問題を解決できます(この方法を使用しました)。開発ディレクトリを更新した後、それを再初期化する必要があります

git init

次に、更新をコミットしてマスターにプッシュできます


1
ありがとう!私の場合は、次のように入力しますgit initと、新しいコマンドタブを開く入力しますgit push origin branch_name
— s7ven

2

これは私^Cが途中で私に起こったgit push GitHubの。ただし、GitHubは変更が行われたことを示しませんでした。

修正するために、作業ツリーに変更を加えてコミットし、再度プッシュしました。それは完全にうまくいきました。


2

これは私に起こりました。変更を再コミットしたところ、プッシュされました。


2

ここで定義されているものを含む多くの方法を試しました。私が得たものは、

  • リポジトリの名前が有効であることを確認してください。最善の方法は、リポジトリサイトからリンクをコピーしてgit bashに貼り付けることです。

  • 選択したファイルをコミットしたことを確認してください。

    git commit -m "Your commit here"
    
  • 両方の手順がうまくいかない場合は、

    git push -u -f origin master


1

代わりに、以下を試すことができます。あなたは行く必要はありませんmaster。ブランチ自体から変更を直接強制的にプッシュできます。

上記で説明したように、リベースを実行すると、ブランチの履歴が変更されます。その結果、git pushリベース後に通常を実行しようとすると、サーバーのコミットからブランチのコミットへの直接パスがないため、Gitはそれを拒否します。代わりに、-for --forceフラグを使用して、Gitに「はい、何をしているのか本当にわかっている」と伝える必要があります。強制プッシュを行う場合はpush.default、構成設定をシンプルに設定することを強くお勧めします。これは、Git 2.0のデフォルトです。構成が正しいことを確認するには、次のコマンドを実行します。

$ git config --global push.default simple

それが正しければ、次のように実行できます。

$ git push -f

そしてあなたのプルリクエストをチェックしてください。更新する必要があります!

詳細については、プルリクエストをリベースする方法の一番下に移動してください。



0

これは、新しいブランチからプッシュしようとして、git push origin master代わりに使用したときに起こりました。次のいずれかを行う必要があります。

  • 使用:git push origin your_new_branchこのブランチがリモートリポジトリでも発生するようにする場合。
  • それ以外の場合は、masterブランチにチェックアウトしてマージし、masterからgit repoにpushしgit merge origin masterます。

要約:ここでのポイントは、git mergeの2番目のパラメーターで提供する場所を確認する必要があるということです。したがって、マスターにいる場合は、2番目のパラメーターとしてマスターを使用します。new_branchにいる場合は、これを2番目のパラメーターとして使用します。このブランチをリモートリポジトリに保持する場合は、代わりに上記の2番目のオプションを選択します。


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