SORU
17 EYLÜL 2009, PERŞEMBE


Nasıl son bölünmüş Gıt ikiye taahhüt

İki iş dalları varustaveforumve sadece bazı değişiklikler yaptıkforumcherry-pick istediğim dalusta. Ama ne yazık ki, kiraz almak istiyorum da işlemek istemiyorum bazı değişiklikler içeriyor.

Çözüm muhtemelen bir şekilde yanlış ve iki ayrı işliyor, master almak istiyorum değişiklikleri ve oraya ait olmayan başkaları ile işlemek yerine silmek olacaktır.

Yapmaya çalıştım

git reset --hard HEAD^

tüm değişiklikler silinmiş, bu yüzden geri gitmek zorunda kaldım

git reset ORIG_HEAD

Yani sorum şune için en iyi yoldurbölson iki ayrı taahhüt içine işliyorsun?

CEVAP
17 EYLÜL 2009, PERŞEMBE


Dizin kullanmanız gerekir. Karışık bir sıfırlama yaptıktan sonra ("git reset BAŞ^"), Ekle endeks değişiklikleri ilk seti, daha sonra onları işlemek. Yürütme sonra dinlenme.

"Tüm değişiklikleri koymak için dizin için bir dosya yaptı. "git add kullanabilirsiniz Eğer her bir değişiklik, bir dosya, bazıları, sadece sahne istemiyorum kullanabilir "- p". gıt Ekle

Bir örnek görelim. Hadi içeren bir dosya adında dosyam vardı sanırım aşağıdaki metin:

something
something else
something again

Şimdi bu gibi görünüyor bu yüzden bu benim son tamamlama düzenledim:

1
something
something else
something again
2

Şimdi ikiye bölmek istiyorum, ve ekleme istiyorum karar ilk olarak kendilerini ilk satır ve son satır ekleme ikinci commit.

KAFASININ üst dönün önce ben, ancak dosya sisteminde değişiklikler devam etmek istiyorum, ettim "" bağımsız değişkeni olmadan sözde "karma"bir tür olarak (git reset reset):

$ git reset HEAD^
myfile: locally modified
$ cat myfile
1
something
something else
something again
2

Şimdi" dizine işlemek istiyorum değişiklikleri (=ben eklemek için "git add-p kullanıyorum onları sahne) "gıt-p" seni isteyen, interaktif bir araçtır ne ekleyin. değişiklikleri dosyaya dizin eklemek gerekir.

$ git add -p myfile
diff --git a/myfile b/myfile
index 93db4cb..2f113ce 100644
--- a/myfile
    b/myfile
@@ -1,3  1,5 @@
 1
 something
 something else
 something again
 2
Stage this hunk [y,n,a,d,/,s,e,?]? s    # split this section into two!
Split into 2 hunks.
@@ -1,3  1,4 @@
 1
 something
 something else
 something again
Stage this hunk [y,n,a,d,/,j,J,g,e,?]? y  # yes, I want to stage this
@@ -1,3  2,4 @@
 something
 something else
 something again
 2
Stage this hunk [y,n,a,d,/,K,g,e,?]? n   # no, I don't want to stage this

O zaman bu ilk değişiklik sana teslim ediyorum:

$ git commit -m "Added first line"
[master cef3d4e] Added first line
 1 files changed, 1 insertions( ), 0 deletions(-)

Şimdi tüm diğer değişiklikler "" son satır) 2: . (yani bu rakamı taahhüt edebilirim

$ git commit -am "Added last line"
[master 5e284e6] Added last line
 1 files changed, 1 insertions( ), 0 deletions(-)

Hadi günlük var iptalleri ne olduğunu görmek için kontrol edin:

$ git log -p -n2 | cat
Commit 5e284e652f5e05a47ad8883d9f59ed9817be59d8
Author: ...
Date: ...

    Added last line

Diff --git a/myfile b/myfile
Index f9e1a67..2f113ce 100644
--- a/myfile
    b/myfile
@@ -2,3  2,4 @@
 something
 something else
 something again
 2

Commit cef3d4e0298dd5d279a911440bb72d39410e7898
Author: ...
Date: ...

    Added first line

Diff --git a/myfile b/myfile
Index 93db4cb..f9e1a67 100644
--- a/myfile
    b/myfile
@@ -1,3  1,4 @@
 1
 something
 something else
 something again

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Adam Washington

    Adam Washing

    12 Mayıs 2006
  • Miles Fisher

    Miles Fisher

    8 NİSAN 2009
  • Rooster Teeth

    Rooster Teet

    11 Temmuz 2006