Saya seorang pemula Git. Saya baru-baru ini memindahkan proyek Rails dari Subversion ke Git. Saya mengikuti tutorial di sini: http://www.simplisticcomplexity.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/
Saya juga menggunakan unfuddle.com untuk menyimpan kode saya. Saya membuat perubahan pada laptop Mac saya di kereta ke / dari kantor dan kemudian mendorong mereka untuk mengurai ketika saya memiliki koneksi jaringan menggunakan perintah berikut:
git push unfuddle master
Saya menggunakan Capistrano untuk penyebaran dan menarik kode dari repositori yang tidak diuraikan menggunakan cabang utama.
Akhir-akhir ini saya perhatikan pesan berikut ketika saya menjalankan "git status" di laptop saya:
# On branch master
# Your branch is ahead of 'origin/master' by 11 commits.
#
nothing to commit (working directory clean)
Dan saya bingung mengapa. Saya pikir laptop saya adalah asalnya ... tapi tidak tahu apakah fakta bahwa saya awalnya menarik dari Subversion atau mendorong Unfuddle adalah apa yang menyebabkan pesan tersebut muncul. Bagaimana bisa saya:
- Cari tahu di mana menurut Git 'asal / tuan'?
- Jika ada di tempat lain, bagaimana cara mengubah laptop saya menjadi 'asal / master'?
- Dapatkan pesan ini untuk pergi. Itu membuatku berpikir Git tidak senang dengan sesuatu.
Mac saya menjalankan Git versi 1.6.0.1.
Ketika saya menjalankan git remote show origin
seperti yang disarankan oleh dbr, saya mendapatkan yang berikut:
~/Projects/GeekFor/geekfor 10:47 AM $ git remote show origin
fatal: '/Users/brian/Projects/GeekFor/gf/.git': unable to chdir or not a git archive
fatal: The remote end hung up unexpectedly
Ketika saya menjalankan git remote -v
seperti yang disarankan oleh Aristoteles Pagaltzis, saya mendapatkan yang berikut:
~/Projects/GeekFor/geekfor 10:33 AM $ git remote -v
origin /Users/brian/Projects/GeekFor/gf/.git
unfuddle [email protected]:spilth/geekfor.git
Sekarang, yang menarik, saya sedang mengerjakan proyek saya di geekfor
direktori tetapi dikatakan asal saya adalah mesin lokal saya di gf
direktori. Saya percaya gf
adalah direktori sementara yang saya gunakan ketika mengonversi proyek saya dari Subversion ke Git dan mungkin dari mana saya mendorongnya untuk menyelesaikannya. Kemudian saya percaya saya telah memeriksa salinan baru dari tidak beres ke geekfor
direktori.
Jadi sepertinya saya harus mengikuti saran dbr dan melakukan:
git remote rm origin
git remote add origin [email protected]:spilth/geekfor.git
sumber
origin
repositori (meskipun dia tidak tahu bagaimana cara kerjanya dalam istilah git) - menghapus remote tidak akan menjadi hal yang berguna untuk dilakukan untuknya.Saya sampai pada pertanyaan ini mencari penjelasan tentang apa arti pesan "cabang Anda di depan ...", dalam skema umum git. Tidak ada jawaban untuk itu di sini, tetapi karena pertanyaan ini saat ini muncul di bagian atas Google ketika Anda mencari frasa "Cabang Anda di depan 'asal / master'", dan sejak itu saya sudah tahu apa arti pesan itu sebenarnya , Saya pikir saya akan mengirim info di sini.
Jadi, sebagai pemula git, saya bisa melihat bahwa jawaban yang saya butuhkan adalah jawaban yang jelas-jelas baru. Secara khusus, apa arti frasa "cabang Anda di depan oleh ..." adalah bahwa ada file yang Anda tambahkan dan komit ke repositori lokal Anda, tetapi tidak pernah mendorong ke tempat asalnya. Maksud pesan ini semakin dikaburkan oleh fakta bahwa "git diff", setidaknya bagi saya, tidak menunjukkan perbedaan. Baru setelah saya menjalankan "git diff origin / master" saya diberi tahu bahwa ada perbedaan antara repositori lokal saya, dan master jarak jauh.
Jadi, untuk menjadi jelas:
"cabang Anda ada di depan dengan ..." => Anda harus mendorong ke master jarak jauh. Jalankan "git diff origin / master" untuk melihat perbedaan antara repositori lokal Anda dan repositori master jarak jauh.
Semoga ini bisa membantu pemula lainnya.
(Juga, saya mengenali bahwa ada seluk-beluk konfigurasi yang dapat membatalkan sebagian solusi ini, seperti fakta bahwa master mungkin sebenarnya bukan "jarak jauh", dan bahwa "asal" adalah nama yang dapat dikonfigurasi ulang yang digunakan oleh konvensi, dll. tidak peduli tentang hal semacam itu. Kami ingin jawaban yang sederhana dan langsung. Kami dapat membaca tentang seluk-beluknya nanti, setelah kami menyelesaikan masalah yang mendesak.)
Pangeran
sumber
git diff --cached origin/master
instruksi yang lebih baik di sini karena menyatakan apa yang akan hasil dari dorongan berikutnya Perintah yang disorot yang Anda miliki di atas juga menunjukkan file yang tidak dikomit & tidak dipentaskan (saya pikir, saya juga seorang pemula git)git fetch
jika Anda mendapatkan kesalahan ini setelah agit pull remote branch
. Referensi Anda mungkin kedaluwarsa.git fetch
memperbaikinya.origin/master
bagian itu berartimaster
cabang dalamorigin
repo?# On branch master
# Your branch is ahead of 'origin/master' by 3 commits.
Tapi git diff asal / master tidak menunjukkan apa-apa, (dan opsi --cached tidak mengubah ini). Dan, git fetch tidak mengubah ini, git pull tidak mengubah ini, git reset --hard tidak mengubah ini. Untuk mengubah ini, saya perlu: git reset --hard origin / master Dan saya memilih rute itu karena orang lain bekerja dengan saya dalam repositori ini dan saya tidak ingin membatalkan pengujian mereka, dan karena saya tidak bisa mengetahui apa yang dilakukan. adalah.git checkout master
mendapatkan pesan, yang berarti saya harusgit pull origin master
sebelum bekerja. tapi saya merasa sangat membingungkan karena kata-kata dari pesan tersebut menunjukkan yang sebaliknyaSaya punya masalah yang mirip dengan ini di mana direktori kerja saya
ahead of origin by X commits
tetapigit pull
hasilnyaEverything up-to-date
. Saya berhasil memperbaikinya dengan mengikuti saran ini . Saya memposting ini di sini kalau-kalau itu membantu orang lain dengan masalah yang sama.Perbaikan dasar adalah sebagai berikut:
Di mana kata-kata dalam kurung harus diganti dengan nama jarak jauh Anda, nama cabang lokal Anda dan nama cabang jarak jauh Anda. misalnya
sumber
git diff
tidak menunjukkan apa-apa, dan setelah melakukan apa yang Anda gambarkan saya tidak lagi mendapatkan pesan yang membingungkan dan menjengkelkan ini.kadang-kadang ada perbedaan antara versi asal cache lokal (asal / master) dan master asal yang benar.
Jika Anda menjalankan
git remote update
ini akan menyinkronkan kembali master asal dengan origin / masterlihat jawaban yang diterima untuk pertanyaan ini
Perbedaan antara master asal git pull & master asal git pull
sumber
Itu agak tidak masuk akal:
origin
merujuk ke repositori jarak jauh default - yang biasanya Anda ambil / tarik perubahannya dari orang lain.git remote -v
akan menunjukkan kepada Anda apa yangorigin
ada;origin/master
adalah "bookmark" Anda untuk keadaan terakhir yang diketahui darimaster
cabangorigin
repositori, dan milik Anda sendirimaster
adalah cabang pelacakan untukorigin/master
. Ini semua sebagaimana mestinya .Kamu tidak. Setidaknya tidak masuk akal untuk repositori menjadi repositori jarak jauh default untuk dirinya sendiri.
Bukan itu. Ini hanya memberi tahu Anda bahwa Anda telah membuat begitu-dan-begitu banyak komit secara lokal yang tidak ada di repositori jarak jauh (sesuai dengan kondisi repositori terakhir yang diketahui).
sumber
origin
menunjuk laptop secara lokal, karena offline atau berpindah jaringan adalah kasus yang sangat umum untuk perangkat portabel seperti laptop. Dengan cara ini Anda dapat menggunakangit push
dangit pull
kapan saja, tidak perlu dipikirkan jika Anda terhubung ke jaringan yang tepat saat ini. Lokal iniorigin
dapat disinkronkan dengan remote nyata secara otomatis ketika tautan jaringan tersedia, tergantung pada status roaming saat ini. Bagian yang bermasalah adalah kapan harus menjalankan sinkronisasi mana, dibandingkan dengan bagian GIT yang cukup mudah.origin
pada lain repositori pada laptop Anda masuk akal, yakin. Namun, menunjukorigin
repositori itu sendiri tidak akan: tidak ada bedanya apakah Anda menjalankangit push
ataugit pull
, karena repositori selalu benar-benar sinkron dengan repositori itu sendiri. Itu salah, agak tautologis.[Solusi]
^ ini menyelesaikannya untuk saya. Apa yang dilakukannya, itu menyinkronkan master saya (di laptop) dengan "asal" yang ada di server jauh.
sumber
Saya berjuang dengan masalah ini dan tidak ada jawaban sebelumnya yang menangani pertanyaan seperti yang saya lihat. Saya telah menanggalkan masalah kembali ke dasarnya untuk melihat apakah saya dapat menjelaskan masalah saya.
Saya membuat repositori baru (rep1), memasukkan satu file di dalamnya dan melakukan itu.
Saya membuat klon dari rep1 dan menyebutnya rep2. Saya melihat ke dalam rep2 dan melihat file tersebut benar.
Dalam rep1 saya membuat satu perubahan pada file dan melakukan itu. Kemudian di rep1 saya membuat remote untuk menunjuk ke rep2 dan mendorong perubahan.
Sekarang ketika saya masuk ke rep2 dan melakukan 'status git' saya diberitahu bahwa saya berada di depan.
README di rep2 adalah seperti aslinya, sebelum komit kedua. Satu-satunya modifikasi yang telah saya lakukan adalah rep1 dan yang ingin saya lakukan hanyalah mendorongnya ke rep2. Apa yang tidak saya pegang?
sumber
Menunggu Anda untuk "mendorong". Mencoba:
$ git push
sumber
Saya memiliki masalah ini baru-baru ini dan saya pikir itu karena saya telah menghapus beberapa file yang tidak saya butuhkan lagi. Masalahnya adalah bahwa git tidak tahu bahwa file telah dihapus dan ia melihat bahwa server masih memilikinya. (server = asal)
Jadi saya berlari
Dan kemudian jalankan komit dan dorong.
Itu memecahkan masalah.
sumber
Saya seorang pemula git juga. Saya memiliki masalah yang sama dengan pesan 'cabang Anda di depan / master oleh N melakukan'. Melakukan 'git diff origin / master' yang disarankan memang menunjukkan beberapa perbedaan yang tidak ingin saya pertahankan. Jadi ...
Karena klon git saya adalah untuk hosting, dan saya ingin salinan persis dari master repo, dan tidak peduli untuk menyimpan perubahan lokal, saya memutuskan untuk menyimpan seluruh repo saya, dan membuat yang baru:
(di mesin hosting)
Untuk kemudahan, saya digunakan untuk membuat perubahan pada klon di mesin hosting saya. Tidak lagi. Saya akan melakukan perubahan pada master, git melakukan commit di sana, dan melakukan git pull. Mudah-mudahan, ini harus menjaga klon git saya di mesin hosting dalam sinkronisasi lengkap.
/ Nara
sumber
Saya bertanya-tanya hal yang sama tentang repo saya. Dalam kasus saya, saya memiliki remote lama yang saya tidak mendorong lagi sehingga saya perlu menghapusnya.
Dapatkan daftar remote:
Hapus yang tidak Anda butuhkan
sumber
Dimungkinkan untuk mereset ke komit tertentu sebelum komit Anda sendiri dilakukan.
Gunakan
git log
untuk menemukan komit yang merupakan komitmen yang Anda miliki sebelum perubahan lokal terjadi.Catat komit lokal dan atur ulang langsung ke komit sebelumnya:
sumber
Saya memiliki masalah "Cabang Anda di depan 'asal / master' oleh nn commit." ketika saya mendorong ke repositori jarak jauh dengan:
Ketika saya menemukan bahwa alamat jarak jauh saya ada di file .git / FETCH_HEAD dan digunakan:
masalahnya hilang.
sumber