Git push tidak akan melakukan apa pun (semuanya terbaru)


100

Saya mencoba memperbarui repositori Git di GitHub. Saya membuat banyak perubahan, menambahkannya, berkomitmen kemudian mencoba melakukan a git push. Tanggapannya memberi tahu saya bahwa semuanya mutakhir, tetapi jelas tidak.

git remote show origin

merespons dengan repositori yang saya harapkan.

Mengapa Git memberi tahu saya bahwa repositori adalah yang terbaru ketika ada komit lokal yang tidak terlihat di repositori?

  [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)

Jawaban:


142

git pushtidak mendorong semua cabang lokal Anda: bagaimana cara mengetahui cabang jarak jauh mana yang harus didorong? Ini hanya mendorong cabang lokal yang telah dikonfigurasi untuk mendorong ke cabang jarak jauh tertentu.

Pada versi Git saya (1.6.5.3), ketika saya menjalankannya git remote show originbenar-benar mencetak cabang mana yang dikonfigurasi untuk push:

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

Q. Tapi saya bisa memaksakan diri mastertanpa mengkhawatirkan semua ini!

Ketika Anda git clone, secara default mengatur mastercabang lokal Anda untuk mendorong ke mastercabang jarak jauh (secara lokal disebut sebagai origin/master), jadi jika Anda hanya berkomitmen master, maka yang sederhana git pushakan selalu mendorong perubahan Anda kembali.

Namun, dari cuplikan keluaran yang Anda posting, Anda berada di cabang bernama develop, yang saya kira belum diatur untuk mendorong apa pun. Jadi git pushtanpa argumen tidak akan mendorong komit di cabang itu.

Ketika dikatakan "Semuanya up-to-date", itu berarti "semua cabang yang Anda beri tahu saya cara mendorong adalah yang terbaru".

T. Jadi bagaimana saya bisa mendorong komitmen saya?

Jika apa yang ingin Anda lakukan adalah memasukkan perubahan dari developke origin/master, Anda mungkin harus menggabungkannya ke lokal Anda masterlalu mendorongnya:

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

Jika yang Anda inginkan adalah membuat developcabang di remote, terpisah dari master, maka berikan argumen ke git push:

git push origin develop

Itu akan: membuat cabang baru di remote yang disebut develop; dan memperbarui cabang itu dengan developcabang lokal Anda ; dan diatur developke dorong origin/developsehingga di masa depan, git pushtanpa argumen akan mendorong developsecara otomatis.

Jika Anda ingin mendorong lokal Anda developke cabang jarak jauh yang memanggil sesuatu selain develop , maka Anda dapat mengatakan:

git push origin develop:something-else

Namun, formulir itu tidak akandevelop selalu dibuat untuk didorong origin/something-elsedi masa mendatang; ini adalah operasi sekali pakai.


Terima kasih banyak, git push origin Anda berkembang: sesuatu-lain telah memberikan jawaban atas pertanyaan yang tidak bisa saya dapatkan untuk sementara waktu.
Antroid

1
Dalam kasus saya git push origin x, masih belum menyiapkan cabang x untuk didorong di masa mendatang. Itu karena pushspec tertentu di .gitconfig [remote "origin"]bagian yang menyebabkan perilaku git.
Raman

27

Ini terjadi pada saya ketika aplikasi SourceTree saya macet selama pementasan. Dan pada baris perintah, sepertinya perintah sebelumnya git addtelah rusak. Jika ini masalahnya, coba:

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

Pada perintah terakhir, Anda mungkin perlu mengatur cabang.

git push --all origin master

Ingatlah bahwa ini cukup jika Anda belum melakukan percabangan atau semacamnya. Dalam hal ini, pastikan Anda mendorong ke cabang yang benar seperti git push origin develop.


15

Mencoba:

git push --all origin

ini mendorong komit untuk memisahkan cabang di repo, bukan dari satu cabang ke master.
Sreedevi J

13

Silakan coba ke commit terakhir lalu lakukan git push origin HEAD:master.


1
Ini benar-benar berhasil. Apakah Anda ingin menjelaskan mengapa ini berhasil?
René Nyffenegger

Secara tekstual dari dokumen: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

Bekerja untuk saya juga
Jerad Rutnam

Saya membandingkan bagaimana repo saya dikonfigurasi dan semua cabang tampak sama. Namun, dalam satu cabang saya tidak bisa hanya menggunakan git push: / ini bekerja untuk saya juga: git push origin HEAD:my_branch_name.
iaforek

6

Untuk kasus saya, tidak ada solusi lain yang berhasil. Saya harus melakukan backup file baru yang dimodifikasi (ditunjukkan dengan git status), dan menjalankan file git reset --hard. Ini memungkinkan saya untuk menyetel kembali dengan server jarak jauh. Menambahkan file baru yang dimodifikasi, dan menjalankan

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

Berhasil. Saya harap ini membantu seseorang, sebagai solusi "kesempatan terakhir".


4

Saat ini, tampaknya Anda berada di cabang pengembangan. Apakah Anda memiliki cabang pengembangan di tempat asal Anda? Jika tidak, coba git push origin develop. git pushakan bekerja setelah mengetahui tentang mengembangkan cabang di asal Anda.

Sebagai bacaan lebih lanjut, saya akan melihat halaman manual git-push , khususnya, bagian contoh.


3

Untuk lebih spesifiknya, jika Anda ingin menggabungkan sesuatu menjadi master, Anda bisa mengikuti langkah-langkah di bawah ini.

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.

Ini adalah praktik umum dalam model permintaan tarik, buat ke cabang lokal baru dan kemudian dorong cabang itu ke jarak jauh. Untuk itu Anda perlu menyebutkan di mana Anda ingin mendorong perubahan Anda dari jarak jauh. Anda dapat melakukan ini dengan menyebutkan remote pada saat push.

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

Jika Anda ingin membuat cabang selain nama cabang lokal Anda, Anda dapat melakukannya dengan perintah berikut.

git push origin develop:some-other-name

2

Terima kasih kepada Sam Stokes. Menurut jawabannya Anda dapat menyelesaikan masalah dengan cara yang berbeda (saya menggunakan cara ini). Setelah memperbarui direktori pengembangan, Anda harus menginisialisasi ulang

git init

Kemudian Anda dapat melakukan dan mendorong pembaruan ke master


1
Terima kasih! Dalam kasus saya, ketik: git initdan buka tab perintah baru, ketik:git push origin branch_name
s7ven

2

Ini terjadi pada saya ketika saya ^Cdi tengah-tengah git pushke GitHub. Namun, GitHub tidak menunjukkan bahwa perubahan telah dilakukan.

Untuk memperbaikinya, saya membuat perubahan pada pohon kerja saya, berkomitmen, lalu mendorong lagi. Ini bekerja dengan baik.


2

Ini terjadi pada saya. Saya baru saja melakukan perubahan, dan kemudian mendorong.


2

Saya mencoba banyak metode termasuk didefinisikan di sini. Apa yang saya dapatkan adalah,

  • Pastikan nama repositori valid. Cara terbaik adalah dengan menyalin tautan dari situs repositori dan menempelkannya di git bash.

  • Pastikan Anda telah melakukan file yang dipilih.

    git commit -m "Your commit here"
    
  • Jika kedua langkah tidak berhasil, coba

    git push -u -f origin master


1

Sebagai gantinya, Anda dapat mencoba yang berikut ini. Anda tidak harus pergi kemaster ; Anda dapat langsung mendorong perubahan dari cabang Anda sendiri.

Seperti yang dijelaskan di atas, saat Anda melakukan rebase, Anda mengubah histori di cabang Anda. Akibatnya, jika Anda mencoba melakukan normal git pushsetelah rebase, Git akan menolaknya karena tidak ada jalur langsung dari komit di server ke komit di cabang Anda. Sebaliknya, Anda harus menggunakan tanda -fatau --forceuntuk memberi tahu Git bahwa ya, Anda benar-benar tahu apa yang Anda lakukan. Saat melakukan push paksa, sangat disarankan agar Anda menyetel push.defaultpengaturan konfigurasi menjadi sederhana, yang merupakan default di Git 2.0. Untuk memastikan bahwa konfigurasi Anda sudah benar, jalankan:

$ git config --global push.default simple

Setelah benar, Anda bisa langsung menjalankan:

$ git push -f

Dan periksa permintaan tarik Anda. Ini harus diperbarui!

Lihat bagian bawah How to Rebase a Pull Request untuk lebih jelasnya.


0

Juga pastikan Anda mendorong ke cabang yang benar.


0

Ini terjadi pada saya setelah saya mencoba mendorong dari cabang baru dan saya menggunakannya git push origin mastersebagai gantinya. Anda harus:

  • Menggunakan: git push origin your_new_branch jika Anda ingin cabang ini terjadi juga di repo jarak jauh.
  • Lain periksa ke cabang master Anda menggabungkan hal-hal lalu dorong dari master ke git repo dengan git merge origin master.

Rekap: intinya di sini adalah Anda harus memeriksa di mana Anda menawarkan pada parameter kedua untuk git merge. Jadi jika Anda berada di master gunakan master sebagai parameter kedua jika Anda berada di cabang_baru gunakan ini sebagai parameter kedua jika Anda ingin menyimpan cabang ini di repo jarak jauh, jika tidak pilih opsi kedua di atas.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.