56

Birleştirmenin iptal edildiğini bildiren bir hata iletisi görüntülendiğinde, komutunu kullanarak komut satırında bir dosyayı birleştirmeyi denedim.Git birleştirme Dosyalarımdaki HEAD işaretleri

Bunun bir sonu olduğunu sanıyordum, ancak dosyamda git işaretlerinin olduğunu anladım. böylece gibi:

start = 
    expression 

validchar = 
    [0-9a-zA-Z_?!+\[email protected]#$%^&*/.] 

integer = 
<<<<<<< HEAD 
    digits:[0-9]+ 
     { return digits.join(""); } 
======= 
    sign:"-"* digits:[0-9]+ 
     { return sign + digits.join(""); } 
>>>>>>> gh-pages 

dosya benim tarafımdan değil düzenlenmiş olan ve gösteri hatları ile eklenen: sonra

  • HEAD işaretleri (<<<<<<< HEAD) değiştirilen kod
  • hatları
  • bir dize daha az eşittir işareti (=======)
  • kodun yeni sürümü
  • başka bir satır işaretlerden büyük olan ve dalın adı ile başlayan (>>>>>>> gh-pages)

Daha da kötüsü, dosya içeriğinin artık sıralı olmamasıdır. Bu dosyaları nasıl normale döndürdüğümü bilen var mı, ve gh şubesinde yaptığım değişiklikler ana dalda birleşti mi?

cevap

66

Bunlar conflict markers. Hala birleştirme sürecindesiniz, ancak Git'in otomatik olarak birleştiremediği bazı bölümler vardı. Olmak istediğinizi need to hand-edit those parts yapacaksınız ve sonuçlarınızı vereceksiniz.


Örneğin, özel durumda, muhtemelen böyle çözmek isterdim (not - okların/sağdaki yazıya benim notlar dosyaya yazarsınız şey değil, sadece vardır) :

integer = 
<<<<<<< HEAD         <-+ remove the bits here 
    digits:[0-9]+        | 
     { return digits.join(""); }    | 
=======          <-+ 
    sign:"-"* digits:[0-9]+ 
     { return sign + digits.join(""); } 
>>>>>>> gh-pages        <-- and this 

ve böylece dosyayı kaydetmek istiyorum ...

integer = 
    sign:"-"* digits:[0-9]+ 
     { return sign + digits.join(""); } 
+0

Düzenlemeyi bitirdiğimde dosya nasıl görünmeli? – lowerkey

+3

@lowerkey Sonun birleşmesini istediğiniz sonucu tam olarak nasıl görünüyorsunuz. Benim tahminim sadece 'gh-pages' versiyonundaki kısmı istemiş olmanızdır, bu yüzden '<<<<<<' - '======' arasındaki eşyaları silmeniz yeterlidir. '>>>>>>' satırı, gerçek kodun iki satırını '=======' ve '>>>>>>' arasında bırakır. – Amber

+0

Teşekkürler, sanırım onu ​​asıyorum. Her şeyi baştan ====== ve sonra da artık HEADmarks'ları kaldırın. – lowerkey

19

Kesinlikle ne var görmek için 'git durumu' ile başlar. Birleştirme işlemini iptal ettiyseniz (veya bir iptal işlemi iptal edildiyse) ve çalışma dizininde çakışan dosyalarınız varsa, bir şeyler ters gitti. Git durumu nerede olduğunu söyleyecektir. Bundan sonra, bir dizi seçeneğiniz var. Sen birleştirme taahhüt çözmelidir ya zor ya gibi bir araç kullanarak yapabilirsiniz,-elle:

git mergetool 

Dosyalarınız birleştirme ihtiyacı olarak listelenen eğer birleştirme aracı çalışacaktır. 1: Dosya adı sözdizimi kullanarak farklı sürümleri görebilirsiniz

git checkout --ours -- /path/to/conflicted-file  # this is probably the one you want 
git checkout --theirs -- /path/to/conflicted-file 

:

Ayrıca birini gerçekleştirebilir. Açıklama için bkz. here. Ancak, yukarıdakilerin tümü, 'git durumunun' dosyaları birleştirme gereğini gösterdiğini varsayar.

Son olarak, her zaman seçeneğine sahip:

git reset --hard # sounds like --hard is what you need but check other options 
+4

"Neyin var olduğunu görmek için git durumu ile başla" tavsiyesine son vermek isterim: tavsiyem, bazı çevrelerde hayali karmaşıklığı için Git'i suçlamakta, ama aslında 'git durumunun çıktısını okumaya dikkat etmekte. En yaygın durumlarda ne yapacağını anlamak için yeterlidir. Bu yüzden, gerçekten: Bir şey ters giderse dur, oku git durumunu oku, düşün. – kostix

1

yanıtların hepsi doğru ancak tüm çatışma işaretleri Autoremove istiyorsanız & sonra oluşturabilir, HEAD tutmak için dosyaları otomatik değiştirme istiyorum senin kendi bash komut gibi: -

Örnek komut:

# vim /usr/sbin/solve.git

(Takip Append)

#!/bin/bash 
for f in $(grep -Rl '^>>>>>>> ' --include="*.php" --include="*.css" --include="*.js" --include="*.html" --include="*.svg" --include="*.txt" .) 
do 
sed -i -e '/^=======/,/^>>>>>>> /d' -e '/^<<<<<<< /d' $f 
sed -i -e '/^>>>>>>> /d' $f 
echo "$f Fixed" 
done 
git add . ; git commit -am "[+] Resolved on `date` from `hostname` by `whoami`" --no-verify 

# chmod 755 /usr/sbin/solve.git

& sadece çözmek için GIT repo/yolunda çalıştırın:

$ cd <path_to_repo>
$ solve.git

Bildirimi: - Yukarıda dosya uzantıları söz php, css, js, html, svg & txt'dir.

İlgili konular