Bagaimana ini bisa terjadi?
Saya bekerja dalam satu repo sendiri saat ini, jadi ini adalah alur kerja saya:
- Ubah file
- Melakukan
- Ulangi 1-2 hingga puas
- Push to master
Lalu ketika saya melakukan git status
itu memberi tahu saya bahwa cabang saya di depan oleh X melakukan (mungkin jumlah yang sama dengan yang saya buat). Apakah karena ketika Anda mendorong kode itu tidak benar-benar memperbarui file yang di-cache secara lokal (di folder .git)? git pull
tampaknya 'memperbaiki' pesan aneh ini, tetapi saya masih penasaran mengapa itu terjadi, mungkin saya menggunakan git yang salah?
termasuk cabang apa yang dicetak dalam pesan
Cabang lokal saya ada di depan master
di mana Anda mendorong / menarik cabang saat ini
Saya mendorong ke GitHub dan menarik ke komputer mana pun yang sedang saya kerjakan pada saat itu, salinan lokal saya selalu sepenuhnya terbaru karena saya adalah satu-satunya yang mengerjakannya.
itu sebenarnya tidak memeriksa repo jarak jauh
Itulah yang saya pikirkan, saya pikir saya akan memastikan pemahaman saya tentang hal itu benar.
Apakah Anda memberikan beberapa argumen tambahan?
Bukan yang bisa saya lihat, mungkin ada konfigurasi lucu yang terjadi di ujung saya?
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
sumber
push
dan apa pengaturan konfigurasi cabang dan jarak jauh Anda?git status
tidak memeriksa repositori jarak jauh,git pull
ya. Jika Anda memiliki cabang pelacakan untuk repositori yang Anda dorong,git push
akan memperbarui cabang pelacakan lokal Anda untuk mencerminkan keadaan baru dari cabang jarak jauh jika dorongan Anda berhasil. Inilah sebabnya saya bertanya tentang konfigurasi penanya karena jika tidak terjadi dengan benar mungkin ada kesalahan konfigurasi.git status
? Betulkah? sayagit status
tidak pernah memberi tahu saya seberapa jauh ke depan cabang saya .. apakah Anda memberikan beberapa argumen tambahan untuk itu?git status
tidak pergi ke repositori jarak jauh untuk memeriksa apakah cabang jarak jauh telah diperbarui. Ini memberi tahu Anda seberapa jauh cabang lokal Anda dibandingkan dengan cabang pelacakan jarak jauh yang disimpan secara lokal . Masalahnya adalah bahwa normalgit push
(serta mengambil dan menarik) harus memperbarui cabang pelacakan jarak jauh dan bagi penanya ini tampaknya tidak berfungsi. Untuk melihat mengapa kita perlu melihat bentuk persis apagit push
yang sedang digunakan dan konfigurasi repositori lokal tetapi karena penanya telah menerima jawaban, saya tidak bisa melihat ini terjadi sekarang.Jawaban:
Jika Anda mendapatkan pesan ini setelah melakukan
git pull remote branch
, coba tindak lanjuti dengan agit fetch
. (Secara opsional, jalankangit fetch -p
untuk memangkas cabang yang dihapus dari repo)Fetch tampaknya memperbarui representasi lokal dari cabang jarak jauh, yang belum tentu terjadi ketika Anda melakukan a
git pull remote branch
.sumber
Menggunakan
Opsi --rebase berarti git akan memindahkan komit lokal Anda, menyinkronkan dengan remote dan kemudian mencoba menerapkan komit Anda dari keadaan baru.
sumber
$ git pull --rebase Current branch xyz is up to date. $ git status On branch xyz Your branch is ahead of 'origin/xyz' by 6 commits. (use "git push" to publish your local commits) nothing to commit, working tree clean
git
, dan jangan pernah menulis ulang sejarah tanpa berpikir!Gunakan 3 perintah sederhana ini
Langkah 1 :
git checkout <branch_name>
Langkah 2 :
git pull -s recursive -X theirs
Langkah 3 :
git reset --hard origin/<branch_name>
Lebih detail: https://stackoverflow.com/a/39698570/2439715
Nikmati.
sumber
git reset --hard origin/master
bagiku.Saya pikir Anda salah membaca pesan - cabang Anda tidak di depan
master
, itu adalahmaster
. Ini di depanorigin/master
, yang merupakan cabang pelacakan terpencil yang mencatat status repositori jauh dari terakhir Andapush
,pull
ataufetch
. Ini memberi tahu Anda apa yang Anda lakukan; Anda unggul dari jarak jauh dan itu mengingatkan Anda untuk mendorong.sumber
Seseorang berkata Anda mungkin salah membaca pesan Anda, Anda tidak salah. Masalah ini sebenarnya ada hubungannya dengan
<project>/.git/config
file Anda . Di dalamnya akan ada bagian yang mirip dengan ini:Jika Anda menghapus baris ambil dari file .git / config proyek Anda, Anda akan menghentikan "Cabang Anda di depan 'origin / master' dengan
N
komit." gangguan dari terjadi.Atau begitulah yang saya harapkan. :)
sumber
ahead by x commits
pesan itu. Saya belum melihat pesan dalam beberapa saat.Saya memiliki masalah ini di server panggung saya di mana saya hanya melakukan penarikan. Dan hard reset membantu saya untuk membersihkan KEPALA yang sama dengan remote.
Jadi sekarang saya punya lagi:
sumber
Ini berhasil untuk saya
git reset --hard origin/master
Outputnya harus seperti
On branch dev HEAD is now at ae1xc41z Last commit message
sumber
Dalam kasus saya itu karena saya beralih ke master menggunakan
Hanya untuk menarik versi baru, alih-alih
Perintah pertama mengatur ulang kepala master ke komit terbaru saya
Saya menggunakan
Untuk memperbaikinya
sumber
Saya memeriksa setiap solusi di halaman ini, dan untungnya @ anatolii-pazhyn berkomentar karena solusinya yang berhasil. Sayangnya saya tidak memiliki cukup reputasi untuk mendukungnya, tetapi saya sarankan mencoba solusinya terlebih dahulu:
Yang memberi saya:
Saya juga merekomendasikan:
Anda juga bisa menggunakan:
Semoga berhasil
sumber
Saya memiliki masalah yang sama pada mesin Windows. Ketika saya menjalankan
git pull origin master
perintah, saya akan mendapatkan peringatan "di depan 'asal / master' oleh X commit". Saya menemukan bahwa jika saya malah berlarigit pull origin
dan TIDAK menentukan cabang, maka saya tidak akan lagi menerima peringatan.sumber
git fetch
belakang layar.Itu hanya mengingatkan Anda perbedaan antara cabang saat ini dan cabang yang melakukan trek saat ini. Harap berikan lebih banyak info, termasuk cabang apa yang dicetak dalam pesan dan di mana Anda mendorong / menarik cabang saat ini.
sumber
Meskipun pertanyaan ini agak lama ... Saya berada dalam situasi yang sama dan jawaban saya di sini membantu saya memperbaiki masalah serupa yang saya miliki
Pertama coba dengan
push -f
atau opsi paksaJika itu tidak berhasil, ada kemungkinan bahwa (seperti dalam kasus saya) repositori jarak jauh (atau lebih tepatnya referensi ke repositori jarak jauh yang muncul
git remote -v
) mungkin tidak diperbarui.Hasil di atas adalah push Anda disinkronkan lokal / cabang Anda dengan remote / cabang Anda namun, cache di repo lokal Anda masih menunjukkan komit sebelumnya (dari lokal / cabang ... asalkan hanya komit tunggal didorong) sebagai HEAD.
Untuk mengkonfirmasi klon di atas repo di lokasi yang berbeda dan mencoba untuk membandingkan HEAD lokal / cabang dan HEAD remote / cabang. Jika keduanya sama maka Anda mungkin menghadapi masalah yang saya lakukan.
Larutan:
Sekarang lakukan
push -f
sebagai berikutgit push -f github master
### Perhatikan perintah Anda tidakorigin
lagi!Lakukan
git pull
sekaranggit pull github master
pada saat
git status
menerima# On branch master
nothing to commit (working directory clean)
Saya harap ini bermanfaat bagi seseorang karena jumlah penayangan sangat tinggi sehingga mencari kesalahan ini hampir selalu mencantumkan utas ini di bagian atas
Lihat juga gitref untuk detailnya
sumber
Saya benar-benar mengalami ini ketika saya melakukan pergantian / checkout dengan TortiseGIT.
Masalah saya adalah bahwa saya telah membuat cabang berdasarkan cabang lokal lain. Itu membuat entri "gabungan"
/.git/config
yang terlihat seperti ini:Di mana setiap kali saya beralih ke cabang "web", ia memberi tahu saya bahwa saya 100+ berkomitmen sebelum berkembang. Yah, saya tidak lagi berkomitmen untuk berkembang sehingga itu benar. Saya dapat menghapus entri ini dan tampaknya berfungsi seperti yang diharapkan. Itu benar pelacakan dengan remote ref daripada mengeluh tentang berada di belakang cabang mengembangkan
Seperti yang dikatakan Vikram, utas Stack Overflow ini adalah hasil teratas di Google ketika mencari masalah ini, jadi saya pikir saya akan membagikan situasi dan solusi saya.
sumber
Saya ingin mengulangi hal yang sama seperti yang disebutkan oleh @Marian Zburlia di atas. Itu bekerja untuk saya dan akan menyarankan hal yang sama kepada orang lain.
git pull origin develop
harus diikuti oleh
$ git pull --rebase
.Ini akan menghapus komentar yang muncul
$ git status
setelah penarikan terakhir.sumber
git fetch
akan menyelesaikan ini untuk AndaJika pemahaman saya benar, lokal Anda (dalam cache)
origin/master
sudah usang. Perintah ini akan memperbarui status repositori dari server.sumber
Pengalaman saya adalah dalam lingkungan tim dengan banyak cabang. Kami bekerja di cabang fitur kami sendiri (di klon lokal) dan itu adalah salah satu yang
git status
menunjukkan saya 11 berkomitmen di depan. Asumsi kerja saya, seperti penulis pertanyaan, adalah bahwa +11 berasal dari komitmen saya sendiri .Ternyata saya telah menarik perubahan dari
develop
cabang umum ke cabang fitur saya beberapa minggu sebelumnya - tetapi lupa! Ketika saya mengunjungi kembali cabang fitur lokal saya hari ini dan melakukangit pull origin develop
nomor melompat ke +41 komit di depan. Banyak pekerjaan yang telah dilakukandevelop
dan cabang fitur lokal saya bahkan lebih maju dari cabang fitur padaorigin
repositori.Jadi, jika Anda mendapatkan pesan ini, pikirkan kembali penarikan / penggabungan yang mungkin Anda lakukan dari cabang lain (Anda sendiri, atau orang lain) yang Anda miliki aksesnya. Pesan hanya sinyal Anda perlu
git push
merekapull
ed perubahan kembali keorigin
repo ( 'pelacakan cabang') dari repo lokal Anda untuk mendapatkan hal-hal disinkronkan up.sumber
Jawaban yang menyarankan
git pull
ataugit fetch
benar.Pesan dihasilkan ketika
git status
melihat perbedaan antara.git/FETCH_HEAD
dan.git/refs/remotes/<repository>/<branch>
(misalnya.git/refs/remotes/origin/master
).File terakhir mencatat HEAD dari pengambilan terakhir (untuk repositori / cabang). Melakukan
git fetch
pembaruan kedua file ke KEPALA cabang saat ini.Tentu saja jika tidak ada yang perlu diambil (karena repositori lokal sudah terbaru) maka
.git/FETCH_HEAD
tidak berubah.sumber
.git/FETCH_HEAD
mengandung9f7336c873ccffc772168bf49807e23ff74014d3 branch 'master' of URL
dan.git/refs/remotes/origin/master
mengandung9f7336c873ccffc772168bf49807e23ff74014d3
, namun saya masih menerima pesan itu dan tidakgit pull
juga tidakgit fetch
menyelesaikannyaJika Anda mendapatkan pesan ini setelah melakukan komit untuk membuka kembali file di cabang, coba buat beberapa perubahan pada file apa pun dan lakukan komit. Tampaknya Anda tidak dapat membuat komit tunggal yang hanya mencakup untracking file yang sebelumnya dilacak. Akhirnya posting ini membantu saya menyelesaikan seluruh masalah https://help.github.com/articles/removing-files-from-a-repository-s-history/ . Saya hanya perlu menghapus file dari riwayat repositori.
sumber