2016-07-08 48 views
5

Üzgünüz, Git'te oldukça yeni bir kullanıcıyım ve Google'da bu kadar zor ifade edilen sorular için (en azından benim için) cevap bulmak zor.Göndermek istediğinizde ne olur, ancak bir başkası yerel repo'unuzda olmayan bir şeyi zaten yapmış mıdır?

Adım adım Joe ve meslektaşım Bob'la bir yazılım programında çalışıyorum.

Biz memba Repo A var ve biz kodu, taahhüt yerel makinelerde Repo A klonları var ve aynı işkolunda periyodik itin usta söylüyorlar. Bunun teknik olarak bunu yapmanın en iyi yolu olmadığını biliyorum, ama örneğin uğruna.

Şimdi, tek bir dosya üzerinde çalışıyorsak ne olur? o henüz itmek vermedi Bob'un yerel dosya içeriği henüz,

// awesome program 
[some edits I made] 

Bob iter içeriği olan bir ikinci itmek vermedi

// awesome program 
[some edits by Bob] 

Benim yerel dosya sahiptir daha sonra itiyorum. Şimdi ne olacak? Bunu yapmanın bir yolu varsa

uzak

// awesome program 
[some edits I made] 

veya

// awesome program 
[some edits Bob made] 

ya da belki olacak dosya mı, ben olmasını istiyorum

// awesome program 
[some edits Bob made] 
[some edits I made] 

Kusursuzluk için özür dilerim :(

+2

Neden sadece denemiyorsunuz? Varsayılan olarak Git, "push" i ileriye atlamamayı reddeder. – PetSerAl

cevap

5

Git, itmeyi reddeder. Sunucuda yeni değişiklikler olduğunu ve zorlamadan önce bir çekme yapmanı söyleyecektir. Bu yüzden, yerel makinenize

ile sona ereceksiniz. Sonra bunu uzaktan kumandaya aktarabileceksiniz.

+1

@JosephA., 'Git pull', açıkça' git getirme ve ardından git birleştirme 'olarak tanımlanır. Ben arka plan için [bu yazı] (http://longair.net/blog/2009/04/16/git-fetch-and-merge/) okumayı çok tavsiye ederim. Ve bir şey daha: * lütfen ciddi bir şekilde onunla uğraşmadan önce Git'teki bir giriş kitabını okuyun. Sorunuz, en temel sürüm kontrol becerilerinin eksikliğini gösterir ve VC, yaptığınız işi tam olarak anlamanızı gerektiren karmaşık bir görevdir. – kostix

+1

@JosephA., Çekme de "antisosyal" davranışıyla sonuçlanabilir çünkü "her bir özellik ayrı bir dalda geliştirilir ve daha sonra ana çizgiye birleştirilir" iş akışı genellikle * standart projeler için * standarttır. Daha fazla bilgi için [Bu açıklamayı Git geliştiriciden] okuyabilirsiniz (https://git-blame.blogspot.ru/2012/03/fun-with-first-parent.html). 'Git çekme' nin tetikleyici-mutlu kullanımı, özellik/hata düzeltme dalının iş akışını bozan şeydir. – kostix

1

Yaptığınız şey bu olduğundan emin değilim, ama yaptığınız zaman yeni bir revizyon oluşturulmalıdır. Her yeni revizyon, önceki versiyonun yerini alacak. Bu bilgilerin yardımcı olup olmadığına bakın: Git Squash Commits

3

İlk önce normal bir şekilde git push ile normal bir şekilde zorlayamazsınız, çünkü yerel ana makinenizdeyken uzak yöneticiniz değişmiştir. git, -f seçeneğiyle bir kuvvet itmeyi yapmanızı öneriyor. git push -f Ancak, interactive rebasing gibi adil bir nedeniniz olmadıkça paylaşılan bir şubeye zorla itiraz etmeniz önerilmez!

İkincisi: Git bu mesajın olarak eğer bir git status yapmak, böylece bir şey uzak depo happend olduğunu bilgilendirilir ve evet o "Your branch and 'origin/master' have diverged, and have 1 and 1 different commit(s) each, respectively." söyler. yerel repo'yu güncellemeniz gerekir; Yani bir git pull yapıyorsun ya da bu durumda daha iyi bir komut, git pull --rebase ve Şaşırtıcı!Git ayrıca çekinizi reddeder ve çakışmalarınızın örnek dosyasında olduğunu söyler. Bu nedenle hem siz hem de Bob, aynı dosyayı ve aynı satırı düzenliyor!

Son olarak: Bu link'a bakın ve çakışmayı giderin. değişikliklerinizi veya Bob'un veya İkisinide tutabilirsiniz. Daha sonra, uzak yanıtınızı güncellemek için değişiklikleri yapın ve git push. ve bu kadar !!!