git: Bagaimana saya mendapatkan versi terbaru dari kode saya?

200

Saya menggunakan Git 1.7.4.1. Saya ingin mendapatkan versi terbaru dari kode saya dari repositori, tetapi saya mendapatkan kesalahan ...

$ git pull
….
M   selenium/ant/build.properties
….
M   selenium/scripts/linux/get_latest_updates.sh
M   selenium/scripts/windows/start-selenium.bat
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>' as appropriate to mark resolution, or use 'git commit -a'.

Saya telah menghapus salinan lokal dari file yang dikeluhkan oleh alat ini, tetapi saya masih mendapatkan kesalahan. Bagaimana cara memeriksa versi terbaru dari repo jarak jauh? - Dave

Dave
sumber
1
@ Kzqai jawaban di bawah ini membantu saya: coba saja lakukan git fetchdulu. Saya tidak mendapatkan konflik, tetapi saya mendapatkan kode versi terbaru.
Chris K

Jawaban:

258

Jika Anda tidak peduli dengan perubahan lokal (termasuk file atau subrepositori yang tidak dilacak atau dibuat yang kebetulan ada di sini) dan hanya ingin salinan dari repo:

git reset --hard HEAD
git clean -xffd
git pull

Sekali lagi, ini akan menghapus setiap perubahan yang Anda buat secara lokal jadi gunakan dengan hati-hati. Pikirkan rm -Rfketika melakukan ini.

Alex Curtis
sumber
1
Saya mencoba perintah ini dan masih mendapatkan kesalahan, "CONFLICT (konten): Gabungkan konflik di selenium / ant / build.xml" (antara lain). Saya hanya ingin menimpa versi terbaru file saya dengan apa yang ada di repo. Apa yang dapat saya??
Dave
31
git clean -fsebenarnya bukan bagian dari jawabannya. Ini akan menghapus file yang tidak disimpan di repositori (misalnya dalam kasus saya, file log); Anda tidak perlu melakukan ini untuk git pullkembali bekerja, git reset --hard HEADcukup sudah.
Darren Cook
12
Esh, kawan, jangan rekomendasikan salah satu dari beberapa perintah penghapusan untuk mendapatkan pemula.
Kzqai
6
@DarrenCook Saya berpikir bahwa git clean -fadalah penting jika Anda ingin nyata up bersih repositoy Anda. Ini setara dengan melakukan "Hapus semua dari folder -> Dapatkan versi Terbaru / Dapatkan Spesifik" di TFS dan dalam kasus saya, inilah yang saya inginkan.
RPDeshaies
3
@ Darren Saya pikir git clean -f`` juga penting. Saya ingin mendapatkan versi terbaru, dan tidak ingin menyimpan entri cache yang usang, atau sumber daya lain yang dihasilkan yang tidak ada dalam repo. Jawabannya jelas tentang fakta bahwa itu akan menghapus perubahan lokal dan meniru versi terakhir dari repo, sehingga terlihat sempurna bagi saya. Saya akan memindahkan file log saya ke tempat lain jika saya benar-benar harus menyimpannya di antara pembaruan.
Balmipour
231

Kasus 1: Jangan pedulikan perubahan lokal

  • Solusi 1: Dapatkan kode terbaru dan setel ulang kode

    git fetch origin
    git reset --hard origin/[tag/branch/commit-id usually: master]
    
  • Solusi 2: Hapus folder dan clone lagi: D

    rm -rf [project_folder]
    git clone [remote_repo]
    

Kasus 2: Peduli dengan perubahan lokal

  • Solusi 1: tidak ada konflik dengan versi online-baru

    git fetch origin
    git status
    

    akan melaporkan sesuatu seperti:

    Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
    

    Kemudian dapatkan versi terbaru

    git pull
    
  • Solusi 2: konflik dengan versi online-baru

    git fetch origin
    git status
    

    akan melaporkan sesuatu seperti:

    error: Your local changes to the following files would be overwritten by merge:
        file_name
    Please, commit your changes or stash them before you can merge.
    Aborting
    

    Komit perubahan lokal Anda

    git add .
    git commit -m ‘Commit msg’
    

    Cobalah untuk mendapatkan perubahan (akan gagal)

    git pull
    

    akan melaporkan sesuatu seperti:

    Pull is not possible because you have unmerged files.
    Please, fix them up in the work tree, and then use 'git add/rm <file>'
    as appropriate to mark resolution, or use 'git commit -a'.
    

    Buka file konflik dan perbaiki konflik. Kemudian:

    git add .
    git commit -m ‘Fix conflicts’
    git pull
    

    akan melaporkan sesuatu seperti:

    Already up-to-date.
    

Info lebih lanjut: Bagaimana cara menggunakan 'git reset --hard HEAD' untuk kembali ke komit sebelumnya?

TVL
sumber
@ tvl.Bagaimana saya bisa mendapatkan pembaruan terbaru tanpa melakukan kode saya (mengalami konflik) ke cabang .. tolong bantu saya
user3354457
@ user3354457 xm, pertanyaan menarik. Saya belum pernah mencoba ini sebelumnya tetapi Anda dapat mencobanya dan melaporkan kembali;) jadi: - Buat tambalan dengan perubahan: git diff> uncommited-changes.patch - Atur ulang cabang - tarik perubahan - tarik tambalan
tvl
3
Jawaban ini layak mendapat lebih banyak suara daripada jawaban yang telah diterima.
James
@ James :) Saya senang jawaban saya membantu Anda. Tip, cobalah untuk menulis dokumentasi seperti Anda tidak tahu apa-apa tentang suatu subjek dan pasti verbositas akan membantu Anda kembali.
tvl
4
Jawaban lengkap terbaik untuk git fetch. Pos ini harus dikunci
Callat
17

Saya menduga apa yang terjadi mungkin karena Anda telah menghapus file yang Anda modifikasi (karena Anda tidak peduli dengan perubahan itu) dan sekarang git menganggap penghapusan sebagai perubahan.

Berikut ini adalah pendekatan yang memindahkan perubahan Anda dari copy pekerjaan Anda ke "simpanan" (jika benar-benar ternyata Anda membutuhkannya lagi), maka Anda dapat menarik perubahan terbaru ke bawah dari hulu.

git stash  
git pull

Jika Anda ingin mengambil file Anda (kemungkinan konflik dengan perubahan hulu dan semuanya), jalankan a git stash applyuntuk menempelkan perubahan itu di atas kode Anda. Dengan begitu, Anda memiliki pendekatan "undo".

Kzqai
sumber
1
Saya mungkin akan merekomendasikan menggunakan git stash popkecuali jika Anda ingin sejarah
simpanan
7

Anda harus menggabungkan file Anda terlebih dahulu. Lakukan git statusuntuk melihat file apa yang perlu digabungkan (berarti Anda harus menyelesaikan konflik terlebih dahulu). Setelah ini selesai, lakukan git add file_mergeddan lakukan pulllagi.

Amokrane Chentir
sumber
2
Terima kasih. Saya menghadapi masalah ini. Saya memiliki beberapa perubahan pada file kerja saya, yang tidak ingin saya komit. Tapi saya tidak bisa melakukan git pull dalam kasus ini. Jadi saya melakukan - git simpanan, git tarik --rebase, git simpanan pop. Kemudian secara manual gabung dan git tambahkan file_merged
RuntimeException
6

coba kode ini

cd /go/to/path
git pull origin master
Amirouche Zeggagh
sumber
5
Selamat datang di Stackoverflow! Harap pertimbangkan untuk menambahkan beberapa penjelasan pada solusi Anda untuk menjelaskan dengan lebih baik bagaimana pemecahannya. Itu akan membuat jawaban Anda lebih berguna
dkackman
2

Jika Anda hanya ingin membuang semua yang ada di folder kerja Anda (mis. Hasil gabungan gagal atau batal) dan kembali ke komit sebelumnya yang bersih, lakukan a git reset --hard.

Damian
sumber
1

Saya mengerti Anda ingin membuang perubahan lokal Anda dan menarik turun apa yang ada di remote Anda?

Jika semuanya gagal, dan jika Anda (cukup dimengerti) takut akan "reset", hal yang paling sederhana adalah mengkloning asal ke direktori baru dan buang yang lama.

Dan Ray
sumber
1

Dengan Menjalankan perintah ini, Anda akan mendapatkan tag terbaru yang biasanya adalah versi proyek Anda:

git describe --abbrev=0 --tags
ReCatCoder
sumber
0

Kedengarannya bagi saya seperti Anda memiliki masalah core.autocrlf. core.autocrlf = true dapat memberikan masalah seperti yang Anda jelaskan di Windows jika baris baru CRLF diperiksa ke dalam repositori. Coba nonaktifkan core.autocrlf untuk repositori, dan lakukan hard-reset.

kusma
sumber
0

Jika Anda menggunakan Git GUI, pertama ambil kemudian bergabung.

Fetch via Remote menu >> Fetch >> Origin. Gabungkan melalui menu Gabung >> Gabungkan Lokal.

Dialog berikut muncul.

masukkan deskripsi gambar di sini

Pilih tombol radio cabang pelacakan (juga secara default dipilih), biarkan kotak kuning kosong dan tekan gabungkan dan ini akan memperbarui file.

Saya sudah mengembalikan beberapa perubahan lokal sebelum melakukan langkah-langkah ini karena saya ingin membuangnya, jadi saya tidak perlu menghilangkan melalui penggabungan nanti.

zar
sumber