"Git checkout <dosya adı>" ve "git checkout - - <dosya adı>" arasındaki fark


Yanıtlar:


214

Özel "seçenek" --, "bu noktadan sonraki her argümanı, nasıl görünürse görünsün bir dosya adı olarak ele almak " anlamına gelir. Bu Git'e özgü değil, genel bir Unix komut satırı kuralı. Normalde, bir bağımsız değişkenin bir seçenek yerine dosya adı olduğunu açıklığa kavuşturmak için kullanırsınız , örn.

rm -f      # does nothing
rm -- -f   # deletes a file named "-f"

git checkout1 ayrıca --, sonraki bağımsız değişkenlerin, hangi kaydetmeyi istediğinizi belirten isteğe bağlı "ağaçsı" parametresi olmadığı anlamına da gelir.

Dolayısıyla bu bağlamda her zaman kullanmak güvenlidir-- , ancak geri döndürmek istediğiniz dosyanın adı ile başlayan veya bir dalın adıyla aynı olduğunda buna ihtiyacınız vardır -. Dal / dosya belirsizliğini giderme için bazı örnekler:

git checkout README     # would normally discard uncommitted changes
                        # to the _file_ "README"

git checkout master     # would normally switch the working copy to
                        # the _branch_ "master"

git checkout -- master  # discard uncommitted changes to the _file_ "master"

ve seçenek / dosya belirsizliği giderme:

git checkout -p -- README  # interactively discard uncommitted changes
                           # to the file "README"

git checkout -- -p README  # unconditionally discard all uncommitted
                           # changes to the files "-p" and "README"

İsmi ile başlayan bir şubeniz varsa ne yaparsınız bilmiyorum -. Belki ilk etapta bunu yapmayın.


Bu modda 1 ; "ödeme" birkaç başka şey de yapabilir. Git'in neden diğer VCS'ler gibi "geri döndürme" veya git'in kendi terimleriyle daha anlamlı olabileceğini düşündüğüm "sıfırlama" yerine "ödünç verme" alt komutunun bir modu olarak "onaylanmamış değişiklikleri at" ı uygulamayı seçtiğini hiç anlamadım.


12
git checkout <ad>, <ad> dalını kontrol eder. git checkout - <ad>, <ad> dosyasının dizin sürümünü kontrol eder.
dunni

3
Teşekkürler, ne yazık ki git dokümantasyonu bunu gerçekten açıklamıyor
Carlton

1
"Unix kuralı" ile ilgili olarak: gerçekten --de seçenekler ve bağımsız değişkenler arasında bir ayırıcı olarak yaygın şekilde uygulanmaktadır. POSIX'i getopt(3)komut satırı seçeneklerini, (bkz. man 3 getopt), Kullanan kabuk komut dosyalarını getopt(1)ve bunu kendileri uygulayan bazı programları işlemek için kullanan , ancak evrensel olarak çalışması garanti edilmeyen herhangi bir program / yardımcı program için çalışır.
arielf

Hah! Diğer komut satırı programlarında bu kuralı görmeyi unuttuğumda, bir C / C ++ --'değişiklikleri reddetmek' anlamına geldiğini varsayarak, çalışma değişikliklerinin nasıl atılacağına dair bir örnek okudum ve o zamandan beri bunu düşünüyorum. Zihin karmaşası!
underscore_d

Benim gibi insanlar için: Master adıyla karıştırmayın, şube değil, master adlı dosya anlamına gelir.
Sert

7

Ardından gelen her şey --bir dosya adı olarak kabul edilir (bir program argümanı olarak değil). Örneğin, tire ile başlayan dosya adlarınız varsa bu önemlidir.

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.