SORU
30 Mayıs 2010, Pazar


Belirli kaldırmak taahhüt

Bir proje üzerinde bir arkadaş ile çalışıyordum ve düzenlenen olmamalıydı dosyaları bir sürü düzenlenmiş. Bir şekilde aldığımda, ya da istediğim özel dosyaları almaya çalıştığımda da benim kendi işim birleşti. Aradım ve oynamak için uzun bir zaman, anlamaya çalışıyorum nasıl kaldırmak için taahhüt içeren düzenlemeler bu dosyaları görünüyor bir at arasında geri ve rebase, ve orada basit örnekler ve dokümanlar varsayalım biliyorum ... olduğunu göreceksiniz.

Burada soru basit bir versiyonu:

Aşağıdaki senaryo göz önüne alındığında, 2 tamamlama nasıl kaldırabilirim?

$ mkdir git_revert_test && cd git_revert_test

$ git init
Initialized empty Git repository in /Users/josh/deleteme/git_revert_test/.git/

$ echo "line 1" > myfile

$ git add -A

$ git commit -m "commit 1"
[master (root-commit) 8230fa3] commit 1
 1 files changed, 1 insertions( ), 0 deletions(-)
 create mode 100644 myfile

$ echo "line 2" >> myfile

$ git commit -am "commit 2"
[master 342f9bb] commit 2
 1 files changed, 1 insertions( ), 0 deletions(-)

$ echo "line 3" >> myfile

$ git commit -am "commit 3"
[master 1bcb872] commit 3
 1 files changed, 1 insertions( ), 0 deletions(-)

Beklenen sonuç

$ cat myfile
line 1
line 3

Burada dönmek için çalışıyorum bir örnek

$ git revert 342f9bb
Automatic revert failed.  After resolving the conflicts,
mark the corrected paths with 'git add <paths>' or 'git rm <paths>'
and commit the result.

CEVAP
16 AĞUSTOS 2012, PERŞEMBE


Bunu yapmanın dört yolu vardır:

  • Yol temiz, dönülüyor ama tutmak dönmek günlüğü:

    git revert --strategy resolve <commit>
    
  • Sert bir şekilde, tamamen son tamamlama kaldırın:

    git reset --soft "HEAD^"
    
  • Rebase (Haritayı günlüğün son 5 tamamlar ve silin hatları istemiyorsun, ya da yeniden düzenlemek, ya da squash çoklu tamamlar, ya da yapmak istediğin başka bir şey var, bu çok yönlü aracı):

    git rebase -i HEAD~5
    

Ve eğer bir hata yapılırsa:

git rebase --abort
  • Hızlı rebase: sadece belirli bir kimliği kullanarak kaydetme kaldırın:

    git rebase --onto commit-id^ commit-id
    
  • Ayrıca deneyebilirsiniz: . alternatifler:

    git cherry-pick commit-id
    
  • Başka bir alternatif:

    git revert --no-commit
    
  • Son çare olarak, eğer ihtiyacın tam özgürlük tarihi düzenleme (örneğin, çünkü gıt yok etmene izin düzenlemek istediklerini yerine) kullanabilirsiniz bu very fast açık kaynak uygulama: reposurgeon.

Not: tabii ki, tüm bu değişiklikler yerel olarak yapılır, 20* *sonra uzaktan değişiklikleri uygulamak gerekir. Ve durumda senin repo istemiyor kaldırmak için commit ("hayır hızlı ileri izin", bu durumda kaldırmak istediğiniz bir taahhüt zaten itti) kullanabilirsiniz git push -f itme kuvveti değişir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • fireflame65

    fireflame65

    27 Mart 2007
  • International Secret Agents Concerts

    Internationa

    2 Aralık 2008
  • MrOctopi

    MrOctopi

    6 Aralık 2010