Önceki şubeyi kontrol etmenin bir yolu var mı?


705

Ben cd -git için eşdeğerini istiyorum . Eğer şubedeysem masterve ödeme fooyaparsam, git checkout -geri dönmek gibi bir şey yazmayı ve geri masterdönmek için tekrar yazmayı isterdim foo.

Bunun gibi bir şey var mı? Uygulaması zor olur mu?


2
Önceki git çıkış komutumu bulmak için YUKARI ok yazın: p
Kit Ho

11
Bu, ellerinizi ev pozisyonundan uzaklaştırmayı, gc- yazmanızı WAY daha hızlı ve sonra aradığınızı bulana kadar bastırmayı içerir
Matt Briggs

@MattBriggs gerçekten yazıyor muydunuz gc-veya git checkout -
kısaydı

2
@ jewbix.cube Hem kabuğunuz hem de git için takma adlar hakkında bilgi edinmeniz gerekir.
Gauthier

@KitHo: Kendimi sürekli yapmak istedim, ancak istediğim komut, örneğin dalı yeni oluşturduysam tarihte bile olmayabilir.
M_M

Yanıtlar:


1230

Gönderen 1.6.2 için sürüm notları

@{-1}en son bulunduğunuz dalı ifade etmenin bir yoludur. Bu
yalnızca bir nesne adının beklendiği yerde değil, bir dal adının beklendiği her yerde kabul edilir ve dal adını yazmış gibi davranır.
Örneğin git branch --track mybranch @{-1}, git merge @{-1}ve
git rev-parse --symbolic-full-name @{-1}beklendiği gibi çalışmaya devam eder.

ve

git checkout -kestirme yoludur git checkout @{-1}.


47
vay, tamamen denemeliydim! düşündüm - bir kabuk-izm ve işlevselliği git olsaydı, farklı bir şey olurdu
Matt Briggs

9
Bir taahhüt SHA'sını iki kez kontrol ettiğinizde bu iyi çalışmaz, bu durumda @ {- 1} ilk ödeme öncesinde bulunduğunuz yeri gösterir ..
user716468

1
ZSH kullanıyorum ve @ {- 1} 'i tırnak içine almak zorunda kaldım. Aksi takdirde git boğuldu:error: pathspec '@-' did not match any file(s) known to git. error: pathspec '@1' did not match any file(s) known to git.
Murphy Randle

15
Muhtemelen ilk defa bir SO yanıtı kontrolsüz bir şekilde gülümsedi. Bunun çok daha zor olacağını düşündüm!
Owen

25
Kullanılan pedagoji için ekstra kudos: Genel tesisi göster, sonra kompakt ama daha az genel stenodan bahset! … @{u}Şu anki dalın akış yukarı kolu olan oldukça sık kullanıyorum . Örneğin git log @{u}.., henüz çekilmemiş olan yukarı akış taahhütlerini listeleyen için çok kullanışlıdır . Ve git log ..@{u}henüz itilmemiş olan sadece yerel taahhütler olan sohbet .
Benjohn

208

Bugünlerde bunu yapmanın en basit yolu:

git checkout -

... bir takma addır:

git checkout @{-1}

git checkout eksi

Bununla ilgili daha fazla bilgi edinmek isterseniz, buraya bununla ilgili bir makale yazdım: Git Git'teki Önceki Şubeyi Satın Alın .


3
Mükemmel. Bunu yapmak için git yolunun ne olduğunu araştırıyordum, bu yüzden bu tam takma adı oluşturabilirdim. Sadece var olduğunu gördüğüme sevindim.
Tabitha

3
Önceki şubeleri kontrol etmeden listelemenin bir yolu var mı?
Erotemik

7
@Erotemic bash kullanarak -for i in{1..10}; do git rev-parse --symbolic-full-name @{-$i}; done
Bonsaigin

'Git ödeme -' takma ad görmek şaşırtıcı! Aradığım tam ux bu :)
James Tayler

@ Powershell'de erotik olurdu git reflog | ? { $_ -match ': checkout: moving from (.*) to (.*)'} | % { $Matches[1] } . Bash'de eşdeğer bir şey yazmanız gerekir (reflog'u alın ve ": checkout:" dizesini içeren satırlara filtreleyin ve ardından şube adını çıkarın). Aslında bu git
Mariusz Pawelski

28

@Karl'ın işaret ettiği gibi ve git checkoutkılavuzdan:

Özel bir durum olarak, son N. Dalın "@ {- N}" sözdizimi dalı (ayırmak yerine) denetler. Ayrıca - "@ {- 1}" ile eşanlamlı olarak da belirtebilirsiniz.

Yani her ikisi de git checkout -ve git checkout @{-1}bu durumda çalışır

En yakın inanıyorum git reflogen son moving from branch1 to branch2vegit checkout branch1


11

Sadece hangi mekanizmanın git checkout @{-N}çalıştığını anlamak için önceki cevaplara biraz daha ayrıntı eklemek . Bu size çıkışını ayrıştırmak gerekir kendi başınıza benzer bir şey uygulamak istedim eğer öyleyse, ödeme tarihini incelemek reflog yürür git reflogarayan checkout:hatları. Uygulamayı git kaynağında sha1_name.c, özellikle işlevde kontrol edebilirsiniz interpret_nth_prior_checkout.



10

Git sürümü , bunu (ve daha fazlasını) yapmak için kullanabileceğiniz komutu 2.23tanıttı git switch. Resmi belgelerin alıntılanması:

Belirtilen bir şubeye geçin. Çalışma ağacı ve dizin dalla eşleşecek şekilde güncelleştirilir. Tüm yeni taahhütler bu şubenin ucuna eklenecektir.

Özel durumunuzda git switch -daha önce bulunduğunuz şubeye geri dönebilirsiniz. İlk şubeye dönmek için aynı komutu tekrar yürütebilirsiniz.

Not: Bunu nasıl yapacağınızı zaten bilmiyorsunuz (yani bu soruyu sorduğunuzdan bu yana 7 yıl geçti), ancak bu komut, kullanıldığında ortaya çıkan ortak bir karışıklığa hitap ettiği için yeni başlayanlar için daha az kafa karıştırıcı ve dost değil git checkout.


5

Bu soruyu bir önceki şubemi kontrol etmek için aynı düşünce ile indim. Ben kullanıyorum ohmyz içinde Mac. Aşağıdaki komut bana yardımcı oldu.

$ gco -
$ git checkout -

Sadece ohmyz diğer zsh paket yöneticileri ile karşılaştırıldığında süper yavaş bir heads-up. Antijen veya zplug'a göz atmanızı tavsiye ederim .
spex

2
Açık değilse, bu işe yarıyor çünkü Oh My Zsh'ın Git eklentisigco kısa bir yazma yolu olarak tanımlıyor git checkout. Yani gco -sadece arar git checkout -.
Rory O'Kane

arkadaşım. açıklamaya gerek yok git checkout -. arıza güvenliği için güncellendi.
Venkat.R

1

En popüler çözüm:

git checkout @{-N}

Nerede N - adım geçmiş ödeme geçmişine taşımak için şube sayısı.


1

Git belgesinin diğer cevaplar tarafından verilen çözümlerini git checkout -ve git checkout @{-1}çözümlerini açıklayan bölümlerine ilişkin işaretçiler :

  • Herhangi bir komut için bir Git revizyonu belirlerken @{-<n>}, örneğin@{-1} , “ mevcut olandan önce n. Şube / komut teslim alınmış ” anlamına gelir . git checkout <branch>Yinelenen belgeler : “ @{-N}Sözdizimini, git checkoutişlem kullanılarak kontrol edilen N'inci son dal / teslim işlemine başvurmak için kullanabilirsiniz .”

  • İçin <branch>bir argümangit checkout , “Ayrıca 'belirtebilir -' eş anlamlıdır hangi ' @{-1}'.”

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.