Що означає символ caret (^)?


125

Тут я побачив відповідь на запитання, яке допомагає відновити видалений файл у git.

Рішення було

git checkout <deleting_commit>^ -- <deleted_file_path>

Що робить персонаж каретки ( ^)? Я бачив, як це робив дуже корисні речі в git. Це магічно. Хтось, будь ласка, зіпсує це мені і скаже, що це робить?


9
FYI у Windows: ^ не працює, як очікувалося, в оболонці DOS. Використовуйте оболонку git bash, і тоді вона працює.
Cincinnati Joe

5
Цього мені навіть не прийшло в голову, коли я намагався його використати (здогадуючись, що це означає). Caret ( ^) - символ втечі в cmd.exe. Кожен раз, коли я намагався використати це, щоб побачити, чи було б корисно, я насправді нічого не пропускав, що пояснює, чому результати ніколи не були іншими. > _> Дурний cmd.exe. Ви можете уникнути цього, подвоївши його або цитуючи його: git log master^^абоgit log "master^"
bambams

Відповіді:


138

HEAD^ означає перший з батьків наконечника поточної гілки.

Пам’ятайте, що git commits може мати більше одного з батьків. HEAD^це короткий термін HEAD^1, і ви можете також звертатися HEAD^2до цього питання тощо.

Ви можете потрапити до батьків будь-якого вчинку, а не тільки HEAD. Ви також можете переїжджати назад через покоління: наприклад, master~2мається на увазі бабуся та дідусь із наконечника головного відділення, надаючи перевагу першому батькові у випадках неоднозначності. Ці специфікатор можуть бути з'єднані довільно, наприклад , topic~3^2. Дивіться відповідну відповідь на те, у чому різниця між Git HEAD^та HEAD~Git?

Для більш докладної інформації див «Specifying Revisions» розділ git rev-parse --help.


1
Але тоді, за лінійною історією, чому HEAD^^^повертається третя старша комітка, тобто вона рівнозначна HEAD~~~?
Ворак

1
@Vorac Для лінійної історії так.
Грег Бекон

21

Це означає "батько". Отже, HEAD^означає "батько поточного ГОЛА". Ви навіть можете зв'язати їх ланцюгом: HEAD^^означає "батько батьків поточного ГОЛОВА" (тобто бабуся і дідусь поточного ГОЛОВА), HEAD^^^означає "батько батька батька батька поточної ГЛАВИ" тощо.


16

^(Каретка) також може бути використана при вказівці діапазонів .

Щоб виключити доступ, який можна отримати з коміту, використовується префікс ^ нотація . Наприклад, ^ r1 r2 означає, що здійснює доступ з r2, але виключає ті, досяжні з r1.

<rev>

Включіть комісії, до яких можна дістатися (тобто предки).

^ <rev>

Виключіть комісії, до яких можна дістатися (тобто предки).


10

Ось наочне пояснення. Припустимо, у вас є така історія:

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

Коли особливість була об'єднана в майстра, він Cбув створений з двома предками. Git призначає цим предкам числа. Предкові основного рядка Bприсвоюється 1, а предкові функції F- 2.

Таким чином, це C^1стосується Bі C^2посилається на F. C^псевдонім для C^1.

Ви б ніколи не використовували <rev>^3. якби ви здійснили злиття трьох гілок.


7

Карета відноситься до батьків конкретного вчинку. Напр., Це HEAD^стосується батьківського складу поточного комітету HEAD. (також HEAD^^відноситься до бабусі і дідуся).


4

Карат являє собою зсув коміту (батьківський). Так, наприклад, HEAD^означає "одна фіксація від HEAD" і HEAD^^^означає "три коміти від HEAD".


4

(^) Отримує батьківське джерело команди, тобто HEAD ^ отримає батьківське значення HEAD.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.