Apa arti karakter tanda sisipan (^)?

125

Saya melihat jawaban untuk sebuah pertanyaan sini yang membantu memulihkan file yang terhapus di git.

Solusinya adalah

git checkout <deleting_commit>^ -- <deleted_file_path>

Apa yang dilakukan karakter tanda sisipan ( ^)? Saya pernah melihatnya di tempat lain melakukan hal-hal yang sangat berguna di git. Ini ajaib. Seseorang tolong merusaknya untuk saya dan beri tahu saya apa fungsinya?

Charles Ma
sumber
9
FYI di windows: ^ tidak berfungsi seperti yang diharapkan di shell DOS. Gunakan git bash shell dan kemudian berhasil.
Cincinnati Joe
5
Itu bahkan tidak terpikir oleh saya ketika saya mencoba menggunakannya (menebak apa artinya). Tanda sisipan ( ^) adalah karakter pelarian di cmd.exe. Setiap kali saya mencoba menggunakannya untuk melihat apakah itu akan membantu saya sebenarnya tidak memberikan apa-apa, yang menjelaskan mengapa hasilnya tidak pernah berbeda. > _> Cmd.exe bodoh. Anda dapat menghindarinya dengan menggandakan atau mengutipnya: git log master^^ataugit log "master^"
bambam

Jawaban:

138

HEAD^ Berarti induk pertama dari ujung cabang saat ini.

Ingatlah bahwa git commit dapat memiliki lebih dari satu orang tua. HEAD^adalah kependekan dari HEAD^1, dan Anda juga dapat mengalamatkanHEAD^2 dan sebagainya yang sesuai.

Anda dapat menemui orang tua dengan komitmen apa pun, tidak hanya HEAD. Anda juga dapat bergerak mundur dari generasi ke generasi: misalnya, master~2berarti kakek dari ujung cabang utama, memilih orang tua pertama dalam kasus ambiguitas. Specifier ini dapat dirantai sewenang-wenang, misalnya , topic~3^2. Lihat jawaban terkait untuk Apa perbedaan antara HEAD^dan HEAD~di Git?

Untuk detail selengkapnya, lihat bagian "Menentukan Revisi" dari git rev-parse --help.

Greg Bacon
sumber
1
Tapi kemudian, pada sejarah linier, mengapa HEAD^^^mengembalikan komit ketiga yang lebih lama yaitu setara dengan HEAD~~~?
Vorac
1
@Vorac Untuk sejarah linier, ya.
Greg Bacon
21

Artinya "orang tua". Jadi HEAD^artinya "induk dari HEAD saat ini". Anda bahkan dapat merantai mereka bersama-sama: HEAD^^berarti "orang tua dari orang tua dari HEAD saat ini" (yaitu, kakek dari HEAD saat ini), HEAD^^^berarti "orang tua dari orang tua dari orang tua dari HEAD saat ini", dan seterusnya.

mipadi
sumber
16

^( Tanda sisipan) juga dapat digunakan saat menentukan rentang .

Untuk mengecualikan komit yang dapat dijangkau dari komit, notasi prefiks ^ digunakan. Misalnya ^ r1 r2 berarti komitmen dapat dijangkau dari r2 tetapi mengecualikan yang dapat dijangkau dari r1.

<rev>

Sertakan komitmen yang dapat dijangkau dari (yaitu, leluhur dari).

^ <rev>

Kecualikan komitmen yang dapat dijangkau dari (yaitu, leluhur dari).

cmcginty.dll
sumber
10

Berikut penjelasan visualnya. Misalkan Anda memiliki riwayat seperti ini:

                      master  
  ... <- B <- C <- D
             /
... <- E <- F
              feature

Ketika fitur digabungkan menjadi master, Cdibuat dengan dua leluhur. Git memberikan nomor leluhur ini. Leluhur garis utama Bditetapkan 1 dan leluhur fitur Fditetapkan 2.

Jadi C^1mengacu Bdan C^2mengacu pada F. C^adalah alias untuk C^1.

Anda hanya akan menggunakan <rev>^3 . jika Anda telah melakukan penggabungan tiga cabang.

cdosborn.dll
sumber
7

Tanda sisipan mengacu pada induk dari komit tertentu. Misalnya HEAD^merujuk ke induk dari HEAD commmit saat ini. (juga, HEAD^^mengacu pada kakek-nenek).

mopoke
sumber
4

Karat mewakili offset komit (induk). Jadi misalnya, HEAD^berarti "satu komit dari HEAD" dan HEAD^^^berarti "tiga komit dari HEAD".

Amber
sumber
4

(^) Mendapatkan sumber induk dari perintah yaitu HEAD ^ akan mendapatkan induk dari HEAD.

ANAK LAKI-LAKI YANG TINGGI
sumber