Pergi ke revisi tertentu

582

Saya kloning repositori git dari proyek tertentu. Bisakah saya mengubah file ke keadaan awal dan ketika saya meninjau file pergi ke revisi 2, 3, 4 ... paling baru? Saya ingin memiliki gambaran tentang bagaimana proyek ini berkembang.

xralf
sumber

Jawaban:

875

Gunakan git checkout <sha1>untuk memeriksa komit tertentu.

Marcelo Cantos
sumber
2
Anda bisa melakukan ini git log -n1. Tetapi kecuali jika git checkoutgagal, itu adalah usaha yang sia-sia.
Marcelo Cantos
2
Berhasil. Saya harus menggunakan sha1 penuh (tidak parsial). Dan jika saya ingin menempatkan proyek ke revisi kedua? git loghanya menunjukkan komit pertama sekarang, dapatkah saya mengetahui sha1 dari komit berikutnya?
xralf
6
Anda hanya harus menggunakan cukup sha1 untuk menjamin keunikan. Mungkin Anda memiliki kebetulan yang sial. Git tidak memiliki konsep komit "selanjutnya"; sejarah adalah DAG dengan semua panah mengarah ke belakang. Anda harus menjalankan git log --onelinedan menempelkan output ke file teks untuk referensi (jumlah sha1 disingkat yang disediakannya dijamin unik). Pilihan lain, jika histori Anda linier, adalah untuk mencari tahu berapa banyak komit yang ada dari komit pertama hingga masterdan digunakan git checkout master~543(jika ada 543 komit), lalu git checkout master~542, dll.
Marcelo Cantos
20
dan bagaimana cara checkout kembali ke commit saat ini dari "git checkout <sha1>"?
ア レ ッ ク ス
6
@AlexanderSupertramp Periksa cabang.
Marcelo Cantos
50

Untuk menuju ke versi tertentu / komit jalankan perintah berikut. HASH-CODE bisa Anda dapatkangit log --oneline -n 10

git reset --hard HASH-CODE

Catatan - Setelah mengatur ulang ke versi tertentu / komit Anda dapat menjalankan git pull --rebase, jika Anda ingin mengembalikan semua komit yang dibuang.

J4cK
sumber
1
Perhatikan bahwa resettidak hanya mencatat titik tertentu dalam grafik, tetapi juga akan memindahkan cabang yang saat ini Anda periksa
Liam
Juga dengan reset, semua perubahan Anda yang tertunda dibuang.
WilliamKF
2
- Bendera keras akan menghapus komit setelah kata hash .... mungkin ingin menambahkan sedikit tid di sini. Saya yakin orang-orang telah kehilangan sejarah dan bertanya-tanya mengapa.
Urasquirrel
git pull --rebasehanya berfungsi jika Anda memiliki remote untuk repo Anda dan ini terkini.
Keith Thompson
19

Anda bisa mendapatkan tampilan grafis dari sejarah proyek dengan alat-alat seperti gitk. Lari saja:

gitk --all

Jika Anda ingin checkout cabang tertentu:

git checkout <branch name>

Untuk komit tertentu, gunakan hash SHA1 sebagai ganti nama cabang. (Lihat Treeishes di Buku Komunitas Git , yang merupakan bacaan yang bagus, untuk melihat opsi lain untuk menavigasi pohon Anda.)

git log memiliki seluruh rangkaian opsi untuk menampilkan riwayat ringkasan atau ringkasan juga.

Saya tidak tahu cara mudah untuk maju dalam riwayat commit. Proyek dengan sejarah linier mungkin tidak terlalu umum. Gagasan "revisi" seperti yang Anda miliki dengan SVN atau CVS tidak memetakan semua itu dengan baik di Git.

Tikar
sumber
2
Berhati-hatilah: git tidak akan membohongi Anda dengan memberi Anda sejarah linier tunggal dari proyek tersebut. Itu kecuali proyek benar-benar berkembang seperti itu.
Andres Jaan Tack
Bergerak maju tidak berarti secara logis (bahkan dalam sejarah linier), karena komit tidak membuat referensi ke "masa depan". Paling-paling, Anda dapat mengidentifikasi semua komit yang memiliki komit tersebut sebagai orang tua. Pikiran Anda, bergerak mundur juga bukan latihan sepele, karena penggabungan.
Marcelo Cantos
5

Menggunakan kunci SHA1 komit, Anda bisa melakukan hal berikut:

  • Pertama, temukan komit yang Anda inginkan untuk file tertentu:

    git log -n <# commits> <file-name>

    Ini, berdasarkan pada Anda <# commits>, akan menghasilkan daftar komit untuk file tertentu.

    TIP: jika Anda tidak yakin apa komit yang Anda cari, cara yang baik untuk mengetahuinya adalah dengan menggunakan perintah berikut: git diff <commit-SHA1>..HEAD <file-name> . Perintah ini akan menunjukkan perbedaan antara versi komit saat ini, dan versi sebelumnya dari komit untuk file tertentu.

    CATATAN: kunci SHA1 komit diformat dalam git log -ndaftar sebagai:

melakukan <SHA1 id>

  • Kedua, periksa versi yang diinginkan:

    Jika Anda telah menemukan komit / versi yang Anda inginkan, cukup gunakan perintah: git checkout <desired-SHA1> <file-name>

    Ini akan menempatkan versi file yang Anda tentukan di area pementasan. Untuk mengeluarkannya dari area pementasan cukup gunakan perintah:reset HEAD <file-name>

Untuk kembali ke tempat repositori jauh diarahkan, cukup gunakan perintah: git checkout HEAD <file-name>

Penyihir
sumber
2

Saya berada dalam situasi di mana kami memiliki cabang master, dan kemudian cabang lain bernama 17.0 dan di dalam 17.0 ini ada hash komit yang tidak mengatakan "XYZ" . Dan pelanggan diberikan build sampai revisi XYZ itu. Sekarang kami menemukan bug dan itu perlu dipecahkan untuk pelanggan itu. Jadi kita perlu membuat cabang terpisah untuk pelanggan itu sampai hash "xyz" itu. Jadi, inilah cara saya melakukannya.

Pertama saya membuat folder dengan nama pelanggan itu di mesin lokal saya. Katakanlah nama pelanggan adalah "AAA" setelah folder itu dibuat mengeluarkan perintah berikut di dalam folder ini:

  1. git init
  2. git clone Setelah perintah ini Anda akan berada di cabang master. Jadi beralihlah ke cabang yang diinginkan
  3. git checkout 17.0 Ini akan membawa Anda ke cabang tempat komit Anda hadir
  4. git checkout Ini akan membawa repositori Anda hingga hash commit. Lihat nama cabang Anda yang diubah menjadi komit hash no. Sekarang beri nama cabang untuk hash ini
  5. git branch ABC Ini akan membuat cabang baru di mesin lokal Anda.
  6. git checkout ABC
  7. git push origin ABC Ini akan mendorong cabang ini ke repositori jarak jauh dan membuat cabang di server git. Kamu selesai.
abu
sumber
1

Salah satu caranya adalah dengan membuat semua komitmen yang pernah dibuat untuk tambalan. checkout komit awal dan kemudian menerapkan tambalan dalam urutan setelah membaca.

gunakan git format-patch <initial revision>lalu git checkout <initial revision>. Anda harus mendapatkan setumpuk file di direktur Anda mulai dengan empat digit yang merupakan tambalan.

ketika Anda selesai membaca revisi Anda lakukan saja git apply <filename>yang seharusnya terlihat git apply 0001-* dan dihitung.

Tapi saya benar-benar bertanya-tanya mengapa Anda tidak hanya ingin membaca tambalan itu sendiri? Silakan posting ini di komentar Anda karena saya penasaran.

manual git juga memberi saya ini:

git show next~10:Documentation/README

Memperlihatkan konten dari file Documentation / README saat ini sedang dalam komit terakhir ke 10 cabang berikutnya.

Anda juga bisa melihat git blame filenameyang memberi Anda daftar tempat setiap baris dikaitkan dengan penulis hash + komit.

Alex
sumber
1

Untuk mendapatkan kode komitmen tertentu, Anda memerlukan kode hash dari commit tersebut. Anda bisa mendapatkan kode hash dengan dua cara:

  1. Dapatkan dari akun github / gitlab / bitbucket Anda. (Ada di url komit Anda, yaitu: github.com/user/my_project/commit/ commit_hash_code ), atau Anda bisa
  2. git logdan periksa komitmen Anda baru-baru ini di cabang itu. Ini akan menunjukkan kode hash komit Anda dan pesan yang Anda tinggalkan saat Anda melakukan kode Anda. Cukup salin dan lakukangit checkout commit_hash_code

Setelah pindah ke kode itu, jika Anda ingin mengerjakannya dan membuat perubahan, Anda harus membuat cabang lain dengan git checkout -b <new-branch-name>, jika tidak, perubahan tidak akan dipertahankan.

Ianiv Hojman
sumber
0

Untuk memeriksa komit (nb Anda melihat masa lalu!).

  • git checkout "commmitHash"

Untuk memulai kembali secara brutal dari komit dan menghapus cabang-cabang selanjutnya yang mungkin Anda buat kacau.

  • git reset --hard "commmitHash"
Jeremy
sumber