Cabang Anda di depan 'asal / master' dengan 3 komit

354

Saya mendapatkan yang berikut saat menjalankan git status

Your branch is ahead of 'origin/master' by 3 commits.

Saya telah membaca beberapa posting lain cara untuk memperbaiki ini dijalankan git pull --rebasetetapi apa sebenarnya rebase, akankah saya kehilangan data atau apakah ini cara sederhana untuk melakukan sinkronisasi dengan master?

FluxEngine
sumber
19
Saya tidak berpikir ini adalah duplikat ... Pertanyaan ini menanyakan apa artinya, sementara pertanyaan lain adalah bertanya bagaimana membuang perubahan.
onionjake
11
Bagaimana ini ditandai sebagai duplikat oleh begitu banyak orang? Pertanyaan itu jelas menunjukkan bahwa orang tersebut tidak ingin kehilangan perubahan mereka. Mereka telah membuat perubahan dan bingung dengan pesannya. Pertanyaan duplikat yang disebut akan membuat orang kehilangan perubahan mereka.
Derek Greer
4
Saya harus mengatakan bahwa pertanyaan yang terkait dengan di atas sebenarnya bukan duplikat dari pertanyaan ini ...
Dave Kanter
15
@DerekGreer: bagaimana ini ditandai sebagai duplikat? Karena kebanyakan orang yang menandai pertanyaan sebagai duplikat tidak repot untuk benar-benar membaca dan memahami pertanyaan itu. Jika ada kesamaan yang dangkal, mereka akan melompat ke kesimpulan bahwa keduanya identik, dan itu akan sampai ke OP atau orang lain yang bersedia meluangkan waktu untuk dengan hati-hati mengulangi apa yang seharusnya sudah jelas di tempat pertama, jika pembohong-pemburu sebenarnya peduli untuk memperhatikan.
iconoclast
6
^^^ praktiknya adalah membunuh SO, IMO.
Saham Geek

Jawaban:

767

Anda mendapatkan pesan itu karena Anda membuat perubahan pada master lokal Anda dan Anda tidak mendorongnya ke jarak jauh. Anda memiliki beberapa cara untuk "menyelesaikannya" dan biasanya tergantung pada bagaimana alur kerja Anda terlihat:

  • Dalam alur kerja yang baik, salinan master jarak jauh Anda harus yang bagus sementara salinan master lokal Anda hanya salinan yang ada di jarak jauh. Menggunakan alur kerja ini Anda tidak akan pernah mendapatkan pesan ini lagi.
  • Jika Anda bekerja dengan cara lain dan perubahan lokal Anda harus didorong maka git push originanggap saja asalnya adalah remote Anda
  • Jika perubahan lokal Anda buruk maka hapus saja atau setel ulang master lokal Anda ke status pada jarak jauh git reset --hard origin/master
iberbeu
sumber
82
git reset --hard asal / master adalah persis apa yang saya cari. Terima kasih.
FluxEngine
4
@ iberbeu Anda memecahkan hari saya ... reset git - asal asli / master adalah apa yang saya cari. Memberi +1
Ravi
75
Juga fwiw git diff master origin/master(mis. git diff local remote) Untuk melihat perubahan yang akan Anda hapus
Shanimal
1
Saya memiliki local / master di asal / cabang yang jauh sehingga menggunakan git push origin master:branchyang dikembalikan Everything up-to-date, setelah itu pesan menjadi di depan oleh x commit hilang.
fyrye
2
Yang terakhir memberi saya apa yang saya butuhkan di sana!
RyanG
38

Tidak ada yang diperbaiki. Anda baru saja membuat 3 komitmen dan belum memindahkannya ke cabang jarak jauh. Ada beberapa opsi, tergantung pada apa yang ingin Anda lakukan:

  • git push: pindahkan perubahan Anda ke jarak jauh (ini mungkin ditolak jika sudah ada perubahan lain pada jarak jauh)
  • jangan lakukan apa pun dan terus koding, sinkronkan hari lain
  • git pull: dapatkan perubahan (jika ada) dari jarak jauh dan gabungkan ke dalam perubahan Anda
  • git pull --rebase: seperti di atas, tetapi cobalah untuk mengulang komit Anda di atas perubahan jarak jauh

Anda berada dalam situasi klasik (walaupun biasanya Anda tidak akan banyak berkomitmen pada master di sebagian besar alur kerja). Inilah yang biasanya saya lakukan: Tinjau perubahan saya. Mungkin lakukan git rebase --interactiveuntuk melakukan kosmetik pada mereka, jatuhkan yang mengisap, susun ulang agar lebih masuk akal. Sekarang pindahkan ke remote git push. Jika ini ditolak karena cabang lokal saya tidak mutakhir: git pull --rebaseuntuk mengulang pekerjaan saya di atas perubahan terbaru dan git pushlagi.

sore
sumber
Saya menggunakan git pull --rebase, tetapi sekarang dikatakan saya unggul satu komit
FluxEngine
Jadi saya membuat perubahan, didorong untuk menguasai, dan kemudian pemimpin tim kami bergabung menjadi tuan. Jadi perubahan ada di sana saya hanya perlu disinkronkan dengan master saat ini.
FluxEngine
@ MartyMcFly Sulit untuk melihat apa yang terjadi di sini. Anda bilang sudah mendorong? Jadi mengapa Anda masih melakukan yang tidak di master? Apa maksudmu your team lead merged to master? Bukankah Anda mengatakan sudah mendorong untuk menguasai? Apa yang dikandung komit ekstra? Cobalah git diff origin/masteruntuk melihat bagaimana cabang lokal Anda berbeda dari jarak jauh.
sore
1
terima kasih atas bantuannya, maaf jika saya melakukan pekerjaan yang buruk menjelaskan situasinya. Tapi yang saya cari adalah git reset --hard origin / master. Tetapi jawaban Anda bermanfaat +1.
FluxEngine
Saya tampaknya terjebak di antara batu dan tempat yang sulit, saya mencoba melakukan perubahan, lalu git berkata: Anda di depan 11 melakukan. Saya tidak diizinkan memperbarui repositori jarak jauh, jadi tidak mungkin dilakukan push. "git pull" mengatakan: Sudah mutakhir. Jadi saya mencoba saran ketiga Anda, tetapi kemudian git mengatakan: tidak bisa menarik dengan rebase: Anda memiliki perubahan yang belum dipentaskan. silakan lakukan atau sembunyikan mereka. Duh, begitulah aku sampai di sini :-(
Sander de Jong
36

Gunakan 4 perintah sederhana ini

Langkah 1 :git checkout <branch_name>

Ini jelas masuk ke cabang itu.

Langkah 2 :git pull -s recursive -X theirs

Ambil perubahan cabang jarak jauh dan gantikan dengan perubahannya jika timbul konflik. Di sini jika Anda melakukannya, git statusAnda akan mendapatkan sesuatu seperti ini cabang Anda di depan 'asal / master' dengan 3 komit.

Langkah 3 :git reset --hard origin/<branch_name>

Langkah 4 :git fetch

Atur ulang cabang Anda dengan susah payah.

Nikmati.

Abhishek Goel
sumber
17

Datang pada masalah ini setelah saya menggabungkan permintaan tarik di Bitbucket.

Harus dilakukan

git fetch

dan itu dia.

pragman
sumber
2
Saya sedang bekerja dengan repo dari bundel dan mampu menyingkirkan pesan dengan menerapkan "git fetch" ke bundel saat ini. tnx!
Martin Meeser
Pada checkout read-only status git saya menunjukkan saya 2 berkomitmen di depan, log tampak sebagaimana mestinya - semua komit pada awalnya. Saya melakukan git pull dan 5 berkomitmen di depan..WTF ???? Hanya perlu mengambil untuk menyegarkan indeks lokal ... semua baik :)
Chris Rutledge
12

Biasanya jika saya harus memeriksa komit yang berbeda dari master saya lakukan:

git rebase -i origin/master

Dengan cara ini saya bisa melihat komitmen dan memutuskan untuk menjatuhkannya atau memilih ...

Alex
sumber
Jawaban rendah ini di sini adalah apa yang perlu saya lakukan. Saya tidak bisa menemukan cara untuk mengetahui perbedaannya, dan semua variasi git diff ...sihir saya tidak akan berhasil. Ketika saya melakukan ini, itu memberi saya noopsebagai satu-satunya komit, dan ketika saya menerimanya, sekarang cabang saya tidak sinkron dengan asal / master. Jadi tampaknya komit berbeda dari asal / master tidak ada efeknya.
philo vivero
11

Pesan ini dari gitberarti Anda telah membuat tiga komit di repo lokal Anda, dan belum menerbitkannya ke masterrepositori. Perintah untuk menjalankannya adalah git push {local branch name} {remote branch name}.

Perintah git pull(dan git pull --rebase) adalah untuk situasi lain ketika ada komit pada repo jarak jauh yang tidak Anda miliki di repo lokal Anda. The --rebasepilihan cara yang gitakan menggerakkan Anda lokal berkomitmen samping, sinkronisasi dengan repo remote, dan kemudian mencoba untuk menerapkan tiga Anda komit dari negara baru. Mungkin gagal jika ada konflik, tetapi Anda akan diminta untuk menyelesaikannya. Anda juga dapat membatalkan rebasejika Anda tidak tahu cara menyelesaikan konflik dengan menggunakan git rebase --abortdan Anda akan kembali ke keadaan sebelum berjalan git pull --rebase.

Sylvain Defresne
sumber
7

Jika git Anda mengatakan Anda berkomitmen, maka hanya Pertama,

git dorong asal

Untuk memastikan Anda telah mendorong semua pekerjaan terbaru Anda di repo

Kemudian,

git reset --barang asli / master

Untuk mengatur ulang dan mencocokkan dengan repo

Pratik Khadka
sumber
4

Ini terjadi pada saya sekali setelah saya menggabungkan permintaan tarik di Bitbucket.

Saya hanya harus melakukan:

git fetch

Masalah saya terpecahkan. Saya harap ini membantu!!!

Sudhir Vishwakarma
sumber
0
$ git fetch

  - remote: Enumerating objects: 3, done.
  - remote: Counting objects: 100% (3/3), done.
  - remote: Compressing objects: 100% (3/3), done.
  - remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0


$ git pull 

   - Already up to date!
   - Merge made by the 'recursive' strategy.

akhirnya:

$ git push origin
pasir
sumber