Git çekildikten sonra ayrıntı değişikliği


130

Git çekme işleminden sonra, çıktısı değişiklik miktarı hakkında bir özet verir.

Dosyalardan her birini veya bazılarını ayrıntılı değişiklikleri nasıl görebilirim?

Tamam, işte Jefromi'ye sorum:

  1. Ustalaşmak için çektiğimi nasıl anlarım? Tek yaptığım "git çekme" oldu.

  2. Master neyi işaret ediyor ve Git'in iki varsayılan kafası olan master ve HEAD arasındaki fark nedir?

  3. Belirli bir dosyadaki ayrıntılı değişikliği nasıl görebilirim?

  4. Özet çıktısındaki değişikliği en sondan nasıl görebilirim git pull?

  5. Arasındaki fark nedir git diffve git whatchanged?


4
Tamam, yeni soruların düzenlemelerle tekrar tekrar eklenmesi, sistemin tam olarak kullanılması amaçlanan yol değil. Ayrıca man sayfalarına bakarak veya sadece bir şeyler deneyerek birçok sorunuza çok kolay bir şekilde cevap verebilirsiniz. Örneğin , her biri hangi dosyaların değiştiğinin bir listesini içeren kesinleştirme bilgilerinin bir listesini net bir şekilde git diffçıkarırken , açıkça bir fark çıkarır git whatchanged.
Cascabel

Muhtemelen düşük sayınız yüzünden.
TED

@TED ​​Yorum bırakmak için yalnızca 50 rep, olumlu oy vermek için 15 tekrarı gerekir.
Cascabel

Ubuntu'lu dizüstü bilgisayarımda bazen işe yaramıyor. Geçici olarak Centos ile başka bir bilgisayar buldum ve bu yorumu yapıyorum. Her iki bilgisayarda da Firefox kullanıyorum.
Tim

Çok tuhaf. Metaya gidip bunun bilinen bir sorun olup olmadığını görmek / rapor etmek isteyebilirsiniz.
Cascabel

Yanıtlar:


204

Ustalaşmak için çektiğinizi varsayalım. Sen önceki pozisyonuna başvurabilirsiniz mastertarafından master@{1}(hatta veya master@{10.minutes.ago}; Belirtme revizyonları bölümüne bakın git-rev-ayrıştırma adam sayfasında ), bu nedenle gibi şeyler yapabilirsiniz

  • Tüm değişiklikleri görün: git diff master@{1} master

  • Belirli bir dosyadaki değişiklikleri görün: git diff master@{1} master <file>

  • Belirli bir dizindeki tüm değişiklikleri görün: git diff master@{1} master <dir>

  • Değişikliklerin özetine tekrar bakın: git diff --stat master@{1} master

"Uzman olup olmadığımı nasıl anlarım" sorunuza gelince ... dalların kullanılması Git iş akışının önemli bir parçasıdır. Her zaman hangi dalda olduğunuzun farkında olmalısınız - değişiklikleri çekerseniz, onları doğru dala çekmek istersiniz! Şu anda ödünç alınmış olanın yanında bir yıldız işaretiyle birlikte tüm dalların bir listesini komutla görebilirsiniz git branch. Geçerli şube adı da çıktısı ile birlikte yazdırılır git status. Kullanılacak komutların man sayfalarını gözden geçirmenizi şiddetle tavsiye ederim - bu, biraz bilgi toplamak için harika bir yoldur.

Ve son sorunuz: HEADşu anda kontrol edilen şubenin adı. Gerçekten HEADve HEAD@{1}bu bağlamda kullanabilirsiniz , ancak şubeleri kullanmak biraz daha sağlamdır, çünkü gidip başka bir şubeye bakarsanız. HEADşimdi o ikinci dal ve HEAD@{1}şimdi master- istediğiniz şey değil!

Bunun gibi çok sayıda küçük soru sormak zorunda kalmamak için, muhtemelen Git eğitimine bir göz atmalısınız. İnternette bir milyon var, örneğin:


5
bu benim
çözümümden

2
Bunun eski olduğunu biliyorum, ama ... Bunun tam git diff master@{1} mastertersi olmalı: aksi takdirde değişiklik "geriye doğru" gösterilir, yani eklemeler silinmeye
dönüşür

2
git diff master@{1} masterbenim için çalışmadı bunun yerine git diff master~1 masterişi benim için yaptım.
unrealsoul007

5
@ unrealsoul007 O zaman durumunuz farklıydı. master ~ 1, şu anda işaret ettiği bir master'ın ebeveyn commitidir; sadece bu işlemin farkını göreceksiniz. master @ {1}, önceki kaydetme yöneticisinin işaret ettiği; Örneğin az önce çektiyseniz, burada açıklandığı gibi çekmeden önce ustanın konumu bu olacaktır. Bunu yapmadıysa, çektiğinizden beri muhtemelen ustalaşmak için başka bir şey yapmışsınızdır. Deneyin git reflog masterne anlama.
Cascabel

@Jefromi fatal: ambiguous argument 'firstDesign@': unknown revision or path not in the working tree.Bu hatayı almaya devam ediyorum. Git reflog firstDesign bu çıktıya sahip olsa da .
unrealsoul007

52

Böyle bir çekiş yaptığını söyle:

$ git pull
remote: Counting objects: 10, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 6 (delta 4), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
From git@dev.example.com:reponame
   a407564..9f52bed  branchname   -> origin/branchname
Updating a407564..9f52bed
Fast forward
 .../folder/filename          |  209 ++++++++-----
 .../folder2/filename2        |  120 +++++++++++---------
 2 files changed, 210 insertions(+), 119 deletions(-)

Revizyon numaralarını kullanarak nelerin değiştiğini görebilirsiniz:

$ git diff a407564..9f52bed

5
Özeti " git diff --stat a407564..9f52bed" kullanarak veya sadece özet olarak " git diff --summary a407564..9f52bed" alabilirsiniz
Jakub Narębski

14
Git'in daha yeni sürümleri için git pull artık değiştirilen dosyaların listesini vermez. Bunu elde etmek için, `git pull --stat 'yapmanız gerekir
user10

6

1. Ustalaşmak için çektiğimi nasıl anlarım? Tek yaptığım "git çekme" oldu.

Komutun kendisi şu şekilde çalışır:

git pull [options] [<repository> [<refspec>…]]

ve varsayılan olarak mevcut şubeyi ifade eder. Şubelerinizi kullanarak kontrol edebilirsiniz.

git branch -a

Bu, örneğin yerel ve uzak şubelerinizi listeleyecektir ( --- daha net hale getirmek için yerel ve uzak arasına bir ayırıcı eklendi )

*master
foo
bar
baz
---
origin/HEAD -> origin/master
origin/deploy
origin/foo
origin/master
origin/bar
remote2/foo
remote2/baz

Daha sonra bir uzak depoya baktığınızda, neyi kastettiğinizi göreceksiniz:

git remote show origin

aşağıdaki gibi listelenecek:

* remote origin
  Fetch URL: ssh://git@git.example.com:12345/username/somerepo.git
  Push  URL: ssh://git@git.example.com:12345/username/somerepo.git
  HEAD branch: master
  Remote branches:
    foo    tracked
    master tracked
  Local refs configured for 'git push':
    foo    pushes to foo    (up to date)
    master pushes to master (fast-forwardable)

Bu nedenle, nereden çekip iteceğinizden emin olmak oldukça kolaydır.

3. Belirli bir dosyadaki ayrıntı değişikliğini nasıl görebilirim?

4. Son git pull tarafından özet çıktıdaki değişikliği tekrar nasıl görebilirim?

En kolay ve en zarif yol (imo):

git diff --stat master@{1}..master --dirstat=cumulative,files

Bu size, son çekiminiz ile mevcut çalışma durumunuz arasındaki değişiklikler hakkında iki bilgi bloğu verecektir. Örnek çıktı ( Daha net hale getirmek için ve çıktı --- arasında bölücü olarak bir ekledim ):--stat--dirstat

 mu-plugins/media_att_count.php                     |  0
 mu-plugins/phpinfo.php                             |  0
 mu-plugins/template_debug.php                      |  0
 themes/dev/archive.php                             |  0
 themes/dev/category.php                            | 42 ++++++++++++++++++
 .../page_templates/foo_template.php                |  0
 themes/dev/style.css                               |  0
 themes/dev/tag.php                                 | 44 +++++++++++++++++++
 themes/dev/taxonomy-post_format.php                | 41 +++++++++++++++++
 themes/dev/template_parts/bar_template.php         |  0
 themes/someproject/template_wrappers/loop_foo.php  | 51 ++++++++++++++++++++++
---
 11 files changed, 178 insertions(+)
  71.3% themes/dev/
  28.6% themes/someproject/template_wrappers/
 100.0% themes/
  27.2% mu-plugins/
   9.0% themes/dev/page_templates/
   9.0% themes/dev/template_parts/
  63.6% themes/dev/
   9.0% themes/someproject/template_wrappers/
  72.7% themes/

2

Bu yol biraz karmaşık, ancak gitkveya gitgveya gibi grafik araçları kullanmanıza izin verir git-gui:

git pull
git reset HEAD@{1}
gitg (or gitk or whatever tool you like)

En çok oy alan yanıt, git aracını kullanarak en iyi yolu verir, ancak bu yöntemi kullanıyorum çünkü daha sonra değişiklikleri görmek için GUI ile araçları kullanabilirim: P

Daha sonra, doğru bir şekilde çekip birleştirmek için a yapmak git checkout .ve sonra git pulltekrar yapmak gibi fazladan bir adımım olur , ancak fazladan iki adımla başa çıkmak için bir GUI'deki farklılıkları inceleme yeteneğine değer veriyorum.

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.