You are on page 1of 42

Magia Git

Ben Lynn

Magia Git
Ben Lynn Tr a d u t o r : Le o n a r d o Siq u e i r a R o d r i g u e s {leo n a r d o . s i q u e i r a . r o d r i g u e s @ g m a i l . c o m }

Infor m a e s s o bre a tradu o

F o n t e u tili z a d a s Ano n y m o u s P r o 1 ABCDEFGHIJKLMOPQRSTUVWXYZ a b c de fg h i j k l m n o p q r s t u v w x y z 0 12456789 A P H o nt2 A B C D E F G HIJKL M O P Q R S T U V W X Y Z a b c d e f g h ij k l m n o p q r s t u v w x y z 012456789 3 D i av l o B l a ck ABCDEFGH IJKLMOPQRSTUVWXYZ abcde f gh i j k lmnopqr s tuvwxyz 012456789

P a d r e s q u e t e n t e i u s a r n o t e x t o: T e r m o s e s t r a n g e i r o s n o s i n g u l a r. A s s i m , q u a n d o n e c e s s r i o m u d e i a s fr a s e s p a r a q u e o t e r m o n o s i n g u l a r e n c a i x a s s e m e l h o r; M a n t e r o n o m e G i t c o m o "g" m a i s c u l o; S e g u i r a c o n v e n o a b a i x o n a f o r m a t a o d o t e x t o: Itlico p a r a p a l a v r a s e s t r a n g e i r a s, n o m e d e c o m a n d o s q u a n d o s u b s t a n t i v a d o s. E x e m p l o: "... n o p r i m e i r o commit...", "... u m backup..."; N e grito p a r a c o m a n d o s , n o m e d e d i r e t r i o s. E x e m p l o: "... a j u d a d o g i t he lp re - pa r se...".

T o d a a j u d a p a r a c o r ri g i r e/ o u m e l h o r a r o d o c u m e n t o b e m-v i n d a .

1 2 3

htt p://w w w . m s -stu d i o . c o m/ F o n t S a l e s/ a n o n y m o u s p r o . h t m l htt p://w w w . a p h . o r g/ p r o d u c t s/ a p h o n t . h t m l htt p://w w w . e x l j b r i s . n l

ND ICE
Pr e f c i o ................................................................................................7 A g r a d e c i m e n t o s! .................................................................................7 Lic e n a .................................................................................................7 Lin k s .....................................................................................................8

In t r oduo .......................................9
Tr a b a l h a r Di v e r t i d o .........................................................................9 C o n t r o l e de Ve r s e s ..........................................................................9 C o n t r o l e distri b u d o ..........................................................................1 0
U m a su p e r s t i o ...................................................................................................1 1

C o n f lit o s de m e s c l a g e m (Mer g e) ...................................................1 1

Truques bs i co s ..............................12
S al v a n d o est a d o s .............................................................................1 2
Adi c i o n a r , R e m o v e r , R e n o m e a r .........................................................................1 2

D e s f a z e r/ R e f a z e r av a n a d o ...........................................................1 3
R e v e r t e n d o ............................................................................................................1 4

D o w n l o a d de arq u i v o s .....................................................................1 4 lti m a V e r s o ...................................................................................1 4 P u b li c a o inst a n t n e a ...................................................................1 4 O qu e eu fiz? .....................................................................................1 5

Um pouco de clonagem.....................16
Si n c r o n i z a n d o C o m p u t a d o r e s ........................................................1 6 C o n t r o l e cl s s i c o de c d i g o ............................................................1 6 F a z e n d o u m F o r k do Pr o j e t o ..........................................................1 7 B a c k u p S u p r e m o s ............................................................................1 7 M u ltit a r e f a na vel o c i d a d e da luz ....................................................1 8 C o n t r o l e de Ve r s e s de G u e r r i l h a .................................................1 8

Bruxar i a com branch .......................20


A tecl a ch e f e ...................................................................................20 Tr a b a l h o po r c o ..................................................................................21 C o r r e e s r pi d a s ............................................................................22 Flu x o inin t e r r u p t o ..............................................................................22 R e o r g a n i z a n d o u m a im p r o v i s a o ................................................23 G e r e n c i a n d o o Br a n c h ....................................................................23

Br a n c h Te m p o r r i o s ........................................................................24 Tr a b a l h e co m o qui s e r ......................................................................24

Lies de hi s t o r i a .........................26
Es t o u corr e t o .....................................................................................26 e te m m a i s ....................................................................................26 Alt e r a e s loc a i s po r lti m o ............................................................27 R e e s c r e v e n d o o hist r i c o ...............................................................27 F a z e n d o hist ri a ...............................................................................28 O n d e tu d o co m e o u a da r err a d o ? ...............................................29 Q u e m F e z Tu d o D a r Err a d o ? .........................................................30 Ex p e r i n c i a pe s s o a l .........................................................................30

Gro- Mestre Git ..............................32


Dis p o n i b i li z a o de C d i g o ............................................................32 G e r a o do R e g i s t r o da s M o d i f i c a e s ........................................32 Git po r S S H , H T T P ..........................................................................32 Git Aci m a de Tu d o ...........................................................................33 C o m m i t do qu e M u d o u ....................................................................33 M e u C o m m i t T o Gr a n d e! ...........................................................34 N o pe r c a a C A B E A (HE A D) ......................................................35 Ex p l o r a n d o o H E A D .........................................................................35 B a s e a n d o se no Git .........................................................................36 D u b l s D u r o s na Q u e d a ..................................................................37

Segredos Revelados .........................39


Invi s i b ili d a d e ......................................................................................39 Inte g r i d a d e ........................................................................................39 Inte li g n c i a ........................................................................................40 In d e x a n d o ..........................................................................................41 R e p o s i t r i o s Cr u s .............................................................................41 Ori g e m do Git ....................................................................................41

Ata lhos do Git ...............................42


Mi c r o s o f t Wi n d o w s ...........................................................................42 Ar q u i v o s In d e p e n d e n t e s .................................................................42 Q u e m Es t Ed it a n d o O Q u e ? ........................................................42 Ar q u i v o do His t r i c o .........................................................................43 Cl o n e Inici a l .......................................................................................43 Pr o j e t o s Vo l t e i s ..............................................................................43

C o n t a d o r Gl o b a l ...............................................................................44 S u b d i r e t r i o s Va z i o s ........................................................................44 C o m m i t Inici a l ...................................................................................45

Magia Gi t

Prefcio
G it 4 u m c a ni v et e s u o d o c o nt r ol e d e v e r s e s. U m a f err a m e n t e p oliv al e nt e r e al m e n t e v e r s t il c u j a e x t r a o r d i n r i a fl e x i b ili d a d e t o r n a-o c o m p l i c a d o d e a p r e n d e r, s o b r e t u d o s o z i n h o . C o l o q u e i n e s t a s p a g i n a s o p o u c o q u e a p r e n d i, p o i s i ni c i a l m e n t e ti v e d i fi c u l d a d e e m c o m p r e e n d e r o m a n u a l d o u s u ri o d o G i t 5. C o m o A rt h u r C. C l a r k e 6 b e m c o m e n t o u: Q u al q u e r t e c n ol o gi a s ufici e nt e m e n t e a v a n a d a c o n s i d e r a d a m a g i c a. E s t a u m a t i m a f o r m a d e a b o r d a r o G i t: n o v a t o s p o d e m i g n o r a r s e u f u n c i o n a m e n t o i n t e r n o e v -l o c o m o a l g o d i v e r ti d o q u e p o d e a g r a d a r a o s a m i g o s e e n f u r e c e r o s i n i m i g o s c o m s u a s h o r r e n d a s h a b ili d a d e s . A o in v s d e e n t r ar e m d e t al h e s, f or n e c e r e m o s a p e n a s in str u e s p a r a c a s o s e s p e c f i c o s. A p s o u s o r e p e t i d o, v o c g r a d u a l m e n t e e n t e n d e r c o m o c a d a t r u q u e , e c o m o a d a p t a r a s r e c eit a s s s u a s n e c e s si d a d e s. Outra s E di e s T r a d u o C h i n e s a 7 : p o r J u n J i e, M e n g e J i a n g W e i. P a g i n a n i c a 8: H T M L , s e m C S S . A r q u i v o P D F 9 : p r o n t o p a r a i m p r i m ir.

Agrade cim ento s!


A g r a d e c i m e n t o s a D u s t i n S a l li n g s, A l b e r t o B e r t o g li, J a m e s C a m e r o n , D o u g l a s L i v i n g s t o n e , M i c h a e l B u d d e , R i c h a r d A l b u r y, T a r m i g a n e D e r e k M a h a r p e l a s s u g e s t e s e m e l h o r i a s. [S e e s q u e c i d e v o c , p o r f a v o r a v i s e, a s v e z e s e s q u e o d e a t u a li z a r e s t a s e c o .]

Licen a
E s t e g u i a r e g i d o p e l o s t e r m o s d a t h e G N U G e n e r a l P u b li c L i c e n s e v e r s i o n 3 1 0 . N a t u r a l m e n t e, o s f o n t e s e s t o n u m r e p o s i t r i o G i t, e s o o b t i d o d i g i t a n d o :
$ gi t clone gi t : / / repo.o r.cz/g i t m a g i c.g i t # Cr i a a pasta "g i tmag i c " .

V e j a a s e g u i r o u t r o s l o c a i s.

4 5 6 7 8 9 10

htt p://git-sc m . c o m/ htt p://ww w . k e r n e l . o r g/p u b/s o f t w a r e/ s c m/ gi t/d o c s/u s e r- m a n u a l . h t m l htt p://pt. wi ki p e d i a . o r g/ w i k i/Art h u r _ C . _ C l a r k e htt p://do c s. g o o g l e . c o m/ V i e w ? i d = d f w t h j 6 8 _ 6 7 5 g z 3 b w 8 k j htt p://ww w- cs- st u d e n t s . s t a n f o r d . e d u/~ bl y n n/ git m a g i c/ b o o k . h t m l htt p://ww w- cs- st u d e n t s . s t a n f o r d . e d u/~ bl y n n/ git m a g i c/ b o o k . p d f htt p://ww w . g n u . o r g/lic e n s e s/ g p l- 3.0.ht m l

Links
U m a v e z li s t e i a l g u m a s r e f e r n c i a s , p o r m c o n s o m e m u i t o t e m p o m a n t e-l a s. A l m d i s s o, q u a l q u e r u m p o d e u s a r u m sit e d e b u s c a p a r a e n c o n tr a r t ut o ri ai s , g u i a s e c o m p a r a e s d o G it c o m S u b v e r si o n 11, M e r c u ri al12, o u o u tr o si st e m a d e c o n tr ol e d e v e r s e s. R e p o sitrio s G it gr ti s h t t p://re p o. o r. c z/ h o s p e d a p r o j e t o s li v r e s, i n c l u s i v e e s t e g u i a . h t t p://git o ri o u s. o r g/ o u t r o s i t e d e h o s p e d a g e m G i t d e s ti n a d o a p r o j e t o s d e c d i g o a b e r t o. h t t p://git h u b. c o m/ h o s p e d a p r o j e t o s d e c d i g o a b e r t o d e g r a a , i n c l u s i v e e s t e g ui a , e p r oj et o s p riv a d o s ta m b m.

1 1 htt p://su b v e r s i o n . t i g r i s. o r g/ 1 2 htt p://ww w . s e l e n i c . c o m / m e r c u r i a l/

Magia Gi t

In t r oduo
U s a r e i u m a a n a l o g i a p a r a f al a r s o b r e c o n t r o l e d e v e r s e s . V e j a n a W i k i p d i a o v e r b e t e s i s t e m a d e c o n t r o l e d e v e r s e s 1 3 p a r a u m a m e l h o r e x p li c a o .

Trabalhar Divertido
M e d i v i rt o c o m j o g o s p a r a c o m p u t a d o r q u a s e m i n h a v i d a t o d a. E m c o n t r a p a r ti d a , s c o m e c e i a u s a r s i s t e m a s d e c o n t r o l e d e v e r s e s q u a n d o a d u l t o. S u s p e i t o q u e n o f u i o n i c o , e c o m p a r a r o s d o i s p o d e t o r n a r e s t e s c o n c e i t o s m a i s f c e i s d e e x p li c a r e e n t e n d e r. P e n s e n a e d i o d e s e u c d i g o, d o c u m e n t o, o u q u a l q u e r o u t r a c o i s a, c o m o j o g a r u m j o g o . U m a v e z q u e t e n h a f e it o m u i t o s p r o g r e s s o s , e g o s t a r i a d e d e s a l v a-l o s. P r a i s s o , v o c c l i c a e m S a l v a r n o s e u e d i t o r p r e f e r i d o. P o r m i s t o v a i s o b r e s c r e v e r a v e r s o a n t e ri o r. c o m o n o s a n t i g o s j o g o s o n d e v o c s ti n h a u m a e s p a o p a r a s a l v a r: v o c p o d e s a l v a r, m a s n u n c a m a i s p o d e r v o l t a r a u m e s t a d o s a l v o a n t e r i o r m e n t e. O q u e u m p e n a , p o i s o e s t a d o a n t e ri o r e r a u m a p a r t e m u i t o d i v e r t i d a d o j o g o e v o c g o s t a r i a d e p o d e r r e v i s it a-l o o u t r a h o r a. O u p i o r, o u l ti m o e s t a d o s a l v o u m d i fi c li m o e v o c t e r q u e r e c o m e a r.

Controle de Verse s
A o e d i t a r, v o c p o d e S a l v a r c o m o ... n u m a r q u i v o d i f e r e n t e, o u c o p i a r o a r q u i v o a n t e s d e s o b r e s c r e v e-l o s e v o c q u i s e r m a n t e r a s v e r s e s a n t e r i o r e s . P o d e c o m p r i m i-l o s p a r a e c o n o m i z a r e s p a o. I s t o u m a f o r m a r u d i m e n t a r e m u i t o tr a b a l h o s a d e c o n t r o l e d e v e r s e s. J o g o s d e c o m p u t a d o r a p e rf ei o a r a m e s t e m t o d o, m u it o s d el e s a c r e s c e nt a m a u t o m a ti c a m e n t e a d a t a e a h o r a a o s e s t a d o s s al v o s. V a m o s d i fi c u lt a r u m p o u c o . D i g a m o s q u e s o u m m o n t e d e a r q u i v o s j u n t o s, c o m o o s f o n t e s d o s e u p r o j e t o, o u a r q u i v o s p a r a u m w e b s i t e. A g o r a s e q u i s e r m a n t e r s u a s v e r s e s a n t e r i o r e s , t e r q u e a r q u i v a r t o d o u m d i r e t r i o o u v r i o s. M a n t e r m u i t a s v e r s e s n a m o i n c o n v e n i e n t e e r a p i d a m e n t e s e t o r n a r c a r o. E m a l g u n s j o g o s d e c o m p u t a d o r, u m e s t a d o s a l v o c o n s i s t e d e u m d i r e t r i o c h e i o d e a r q ui v o s. E s t e s jo g o s e s c o n d e m e s t e s d e t al h e s d o jo g a d o r e lh e a p r e s e n t a m u m a i n t e r f a c e c o n v e n i e n t e p a r a g e r e n c i a r a s d i f e r e n t e s v e r s e s n e s t e d i r e t ri o. S i s t e m a s d e c o n t r o l e d e v e r s e s n o s o d i f e r e n t e s. T o d o s t e m u m a b o a i n t e r f a c e p a r a g e r e n c i a r s e u d i r e t ri o d e v e r s e s . V o c p o d e s a l v a r o d i r e t ri o s e m p r e q u e d e s e j a r, e p o d e r e v e r q u a l q u e r u m d o s e s t a d o s a l v o s q u a n d o q u i s e r. A o c o n t r r i o d a m a i o r i a d o s j o g o s d e c o m p u t a d o r, e l e s s o g e r a l m e n t e m a i s e s p e r t o s n a e c o n o m i a d e e s p a o . N o r m a l m e n t e, a p e n a s u n s p o u c o s a r q ui v o s m u d a m d e v e r s o p a r a v e r s o, e c o m p o u c a s dif er e n a s. A r m a z e n a r a s dif er e n a s, a o in v s d e t o d o s o s a r q ui v o s, e c o n o m i z a e s p a o.
1 3 htt p://pt. wi ki p e d i a . o r g/ w i k i/Si s t e m a _ d e _ c o n t r o l e _ d e _ v e r s o

10

In t roduo

Controle distribudo
A g o r a i m a g i n e u m j o g o d e c o m p u t a d o r m u i t o d i f c il. T o d i f c il d e t e r m i n a r q u e v r i o s j o g a d o r e s e x p e r i e n t e s p e l o m u n d o d e c i d e m f o r m a r u m a e q u i p e e c o m p a r til h a r s e u s e s t a d o s s a l v o s d o j o g o p a r a t e n t a r v e n c e-l o. S p e e d r u n s s o e x e m p l o s r e a i s: j o g a d o r e s e s p e c i a li z a d o s e m d i f e r e n t e s n v e i s d o m e s m o j o g o c o l a b o r a m n a p r o d u o d e r e s u l t a d o s i n c r v e i s. C o m o v o c c o n f i g u r a u m s i s t e m a p a r a q u e t o d o s p o s s a m o b t e r f a c il m e n t e o q u e o s o utr o s s al v ar e m? E s alv ar n o v o s e st a d o s? N o s v e l h o s t e m p o s , t o d o s o s p r o j e t o s u t ili z a v a c o n t r o l e d e v e r s e s c e n t r a li z a d o . U m s e r vi d o r e m al g u m lu g a r m a n t m o s jo g o s s al v o s. N i n g u m t e m t o d o s. C a d a jo g a d o r m a n t m , e m s u a m a i o r i a, a p e n a s a l g u n s j o g o s s a l v o s e m s u a s m a q u i n a s . Q u a n d o a l g u m j o g a d o r q u i s e r a v a n a r n o j o g o, e l e p e g a o u l ti m o j o g o s a l v o d o s e r v i d o r, j o g a u m p o u c o , s a l v a e m a n d a d e v o l t a p a r a o s e r v i d o r p a r a q u e o s o u t r o s p o s s a m u s a r. E s e u m jo g a d o r q ui s e r p e g a r u m a n ti g o jo g o s al v o p o r al g u m m o ti v o? T alv e z o a t u al jo g o s alv o e st ej a e m u m n v el i m p o s s v el d e jo g ar d e vi d o al g u m ter e s q u e ci d o u m o bj et o t r s n v e i s a t r s, e p r e c i s o e n c o n t r a r o u l ti m o j o g o s a l v o q u e e s t e m u m n v e l q u e p o d e s e r c o m p l et a d o c o m s u c e s s o. O u t alv e z q u eir a c o m p a r a r d oi s jo g o s s al v o p a r a s a b e r o q u a n t o u m jo g a d o r a v a n o u. P o d e m e x i s ti r v r i o s m o t i v o s p a r a v e r u m a v e r s o a n t i g a, m a s o m o d u s o p e r a n d i o m e s m o . T m q u e s o li c it a r a o s e r v i d o r c e n t r a li z a d o a a n t i g a v e r s o. E q u a n t o m a i s j o g o s s a l v o s f o r e m n e c e s s r i o s, m a i o r o tr a f e g o d e i n f o r m a o . A n o v a g e r a o d e s i s t e m a s d e c o n t r o l e d e v e r s e s , d e n t r e e l e s o G i t, c o n h e c i d a c o m o s i s t e m a s d i s t ri b u d o s , e p o d e s e r p e n s a d a c o m o u m a g e n e r a li z a o d o s s i s t e m a s c e n t r a li z a d o s . Q u a n d o o s j o g a d o r e s p e g a m d o s e r v i d o r, e l e s r e c e b e m t o d o s o s j o g o s s a l v o s , e n o a p e n a s o m a i s r e c e n t e. c o m o s e e s ti v e s s e m e s p e l h a n d o o s e r v i d o r. A p ri m eir a o p e r a o d e cl o n a g e m p o d e s e r b e m d e m o r a d a, e s p e ci al m e n t e s e h u m l o n g o h i s t r i c o, m a s c o m p e n s a d a n o l o n g o p r a z o. U m b e n e f i c i o i m e d i a t o q u e , s e p o r q u a l q u e r r a s o d e s e j a r u m a a n t i g a v e r s o, a tr a f e g o d e i n f o r m a o c o m o s e r v i d o r d e s n e c e s s r i o.

Uma supersti o
U m e q u v o c o p o p u l a r q u e s i s t e m a s d i s t ri b u d o s e s t o m a l a d a p t a d o s p r o j e t o s q u e e x ij a m u m r e p o s i t r i o c e n t r a l o f i c i a l. N a d a p o d e r i a e s t a r m a i s l o n g e d a v e r d a d e . F o t o g r a f a r a l g u m r o u b a r a s u a a l m a . I g u a l m e n t e, c l o n a r o r e p o s i t ri o m a s t e r n o d i m i n u i s u a i m p o r t n c i a. U m a b o a c o m p a r a o i n i c i a l : q u a l q u e r c o i s a q u e u m s i s t e m a c e n t r a li z a d o d e c o n t r o l e d e v e r s e s f a z, u m s i s t e m a d i s t ri b u d o d e c o n t r o l e d e v e r s e s b e m c o n c e b i d o p o d e f a z e r m e l h o r. R e c u r s o s d e r e d e s i m p l e s m e n t e m a i s o n e r o s o q u e r e c u r s o s l o c a i s. E m b o r a v e j a m o s m a i s a d i a n t e q u e e x i s t e m i n c o n v e n i e n t e s n u m a a b o r d a g e m d i s t ri b u d a, m e n o s p r o v v e l q u e f a a c o m p a r a e s e r r n e a s c o m e s t a r e g r a d e o u r o.

Magia Gi t

11

U m p e q u e n o p r oj et o p o d e p r e ci s ar d e a p e n a s u m a fra o d o s r e c u r s o s of er e ci d o s p el o si st e m a. M a s, v o c u s a al g a ris m o s r o m a n o s q u a n d o c al c ul a c o m n m e r o s p e q u e n o s? E m a i s , s e u p r o j e t o p o d e c r e s c e r a l m d a s u a s e x p e c t a ti v a s. U s a n d o G i t, d e s d e o i ni c i o c o m o t e r u m c a n i v e t e s u o, e m b o r a o u s e n a m a i o r i a d a s v e z e s p a r a a b r i r g a r r a f a s. N o d i a q u e n e c e s s i t a r, d e s e s p e r a d a m e n t e, d e u m a c h a v e d e f e n d a v o c a g r a d e c e r p o r t e r m a i s d o q u e u m a b r i d o r d e g a r r a f a s.

Conflitos de mes cl a g e m (Merge)


N e s t e t p i c o, n o s s a a n a l o g i a c o m j o g o s d e c o m p u t a d o r t o r n a s s e r u i m . E m d i s s o , v a m o s c o n s i d e r a r n o v a m e n t e a e d i o d e u m d o c u m e n t o. S u p o n h a q u e A l i c e i n s i r a u m a li n h a n o i ni c i o d o a r q u i v o, e B o b u m a n o fi n a l. A m b o s e n v i a m s u a s a l t e r a e s . A m a i o r i a d o s s i s t e m a s ir d e m a n e i r a a u t o m t i c a e r e a t i v a d e d u zir o pl a n o d e a o: a c eit a n d o e m e s c l a n d o a s m u d a n a s, a s si m a s alt er a e s d e A li c e e B o b s e r o a plic a d a s. A g o r a s u p o n h a q u e a m b o s , A l i c e e B o b , f a a m a l t e r a e s d i s ti n t a s n a m e s m a li n h a . T o r n a n d o i m p o s s v e l r e s o l v e r o c o n flit o s e m i n t e r v e n o h u m a n a . O s e g u n d o , e n t r e A l i c e e B o b , q u e e n v i a r s u a s a l t e r a e s s e r i n f o r m a d o d o c o n f lit o, e e s c o l h e r s e a p li c a s u a a l t e r a o s o b r e a d o o u t r o, o u r e v i s a a li n h a p a r a m a n t e r a m b a s a s a l t e r a e s . S i t u a e s m u i t o m a i s c o m p l e x a s p o d e m s u r g ir. S i s t e m a s d e c o n t r o l e d e v e r s e s s o c a p a z e s d e r e s ol v e r o s c a s o s m a i s si m pl e s, e d ei x a r o s c a s o s m a i s dif c ei s p a r a n o s r e s o l v e r m o s . N o r m a l m e n t e s e u c o m p o r t a m e n t o c o n f i g u r v e l.

12

Truques Bs i co s

Truques Bs i co s
A o i n v s d e s e a p r o f u n d a r n o m a r d e c o m a n d o s d o G i t, u s e e s t e s e x e m p l o s el e m e n t a r e s p a r a d a r o s p ri m eir o s p a s s o s. A p e s a r d e s u a s si m plici d a d e s, c a d a u m d el e s s o m u i t o t e i s. N a v e r d a d e , n o m e u p r i m e i r o m s c o m o G i t, n u n c a p r e c i s e i ir a l m d a s i n f o r m a e s d e s t e c a p t u l o.

Salvando estado s
P e n s a n d o e m t e n t a r a l g o m a i s a r ri s c a d o ? A n t e s d e f a z -l o, tir e u m f o t o g r a fi a d e t o d o s o s a r q u i v o s d o d i r e t ri o a t u a l c o m :
$ gi t in i t $ gi t add . $ gi t commit - m "Meu pr imei ro backup"

A s e q u n c i a d e c o m a n d o s a c i m a d e v e m s e r m e m o r i z a d o s , o u c o l o c a d o s e m u m s c r i p t, p o i s s e r o u s a d o s c o m m u i t a fr e q u n c i a. A s s i m s e a l g o d e r e r r a d o, v o c s p r e c i s a r e x e c u t a r:
$ gi t reset - - hard

p a r a v o l t a r p a r a o e s t a d o a n t e r i or. P a r a s a l v a r o e s t a d o n o v a m e n t e, f a a:
$ gi t commit - a - m "Outro backup"

Adicionar, Remover, Renomear


O s c o m a n d o s a c i m a s ir o v e r ifi c a r a l t e r a e s o s a r q u i v o s q u e e s t a v a m p r e s e n t e s q u a n d o v o c e x e c u t o u s e u p r i m e i r o g i t add. S e v o c a d i c i o n a r n o v o s a r q u i v o s o u d i r e t ri o s ti r a q u e i n f o r m a r a o G i t, c o m :
$ gi t add NOVOSARQUIVOS. . .

D o m e s m o m o d o , s e v o c q u i s e r q u e o G i t n a v e r ifi q u e c e r t o s a r q u i v o s , t a l v e z p o r t l o s a p a g a d o s , f a a:
$ gi t rm ANTIGOSARQUIVOS. . .

R e n o m e a r u m a r q ui v o o m e s m o q u e r e m o v e r n o m e a nti g o e a di ci o n ar u m n o v o n o m e . H t a m b m o a t a l h o g i t mv q u e t e m a m e s m a s i n t a x e d o c o m a n d o mv. P o r e x e m p l o:
$ gi t mv ANTIGOARQUIVO NOVOARQUIVO

Magia Gi t

13

Desfazer/Refazer avan a d o
s v e z e s , v o c s q u e r v o l t a r e e s q u e c e r t o d a s a s m u d a n a s r e a li z a d a s a p a r ti r d e u m c e r t o p o n t o, p o i s e s t o t o d o s e r r a d a s . E n t o :
$ gi t log

m o s t r a r u m a li s t a d o s l ti m o s c o m m i t e s e u s hash S H A 1 . E m s e g u i d a, d i g it e:
$ gi t reset - - hard SHA1_HASH

p a r a r e st a ur ar a o e st a d o d e u m d a d o c o m m it e a p a g ar o s re gistr o s d e to d o s o s n o v o s commit a p a r ti r d e s t e p o n t o p e r m a n e n t e m e n t e. O u t r a s v e z e s v o c q u e r v o l t ar, b r e v e m e n t e, p a r a u m e s t a d o . N e s t e c a s o, d i g it e:


$ gi t checkout SHA1_HASH

I s t o l e v a r v o c d e v o l t a n o t e m p o , p r e s e r v a n d o o s n o v o s c o m m i t. E n t r e t a n t o, c o m o n a s v i a g e n s n o t e m p o d o fil m e s d e fi c o, s e v o c e d i t a r e fi z e r u m c o m m i t, v o c e s t a r n u m e r e a li d a d e a l t e r n a ti v a, p o i s s u a s a e s s o d i f e r e n t e s d a s r e a li z a d a s d a p r i m e i r a v e z. E s t a r e a l i d a d e a l t e r n a t i v a c h a m a d a d e branch, n s f a l a r e m o s m a i s s o b r e i s s o d e p o i s. P o r h o r a , a p e n a s l e m b r e-s e q u e :


$ gi t checkout master

l h e l e v a r d e v o l t a p a r a o p r e s e n t e. A s s i m f a a o G i t p a r a r d e r e c l a m a r, s e m p r e f a a commit o u reset s u a s m u d a n a s a n t e s d e e x e c u t a r u m checkout. V olt e m o s p a r a a a n al o gi a d o s jo g o s d e c o m p u t a d o r : git reset --hard: c a r r e g a u m a n t i g o s a l v a m e n t o e a p a g a r t o d o s o s s al v a m e n t o m a i s n o v o s d o q u e e st e q u e f oi c a rr e g a d o. git checkout: c a r r e g a u m a n t i g o s a l v a m e n t o, m a s s e j o g a r a p a r ti r d e l e , o s p r x i m o s s a l v a m e n t o r e a li z a d o s s e d e s v i n c u l a r o d o s s a l v a m e n t o s j r e a li z a d o s a p s o q u e f o i c a r r e g a d o . Q u a l q u e r s a l v a m e n t o q u e v o c fi z e r s e r c o l o c a d o e m u m branch s e p a r a d o r e p r e s e n t a d o a r e a li d a d e a l t e r n a ti v a e m q u e e n t r o u . L i d a r e m o s c o m i s s o m a i s a f r e n t e. V o c p o d e e s c o l h e r r e s t a u r a r a p e n a s a l g u n s a r q u i v o s o u d i r e t ri o s a c r e s c e n t a n d o-o s a o fi n a l d o c o m a n d o . N o g o s t a d e c o p i a r e c o l a r hash? E n t o u s e:
$ gi t checkout : / "Meu pr imei ro b"

p a r a ir a o commit q u e c o m e a a f r a s e i n f o r m a d a . V o c t a m b m p o d e s o li c it a r p e l o e s t a d o s a l v o a 5 commit a t r s :
$ gi t checkout master~5

14

Truques Bs i co s

Revertendo
C o m o n u m t ri b u n a l, e v e n t o s p o d e m s e r r e ti r a d o s d o s r e g i s t r o s . I g u a l m e n t e, v o c p o d e e s p e c i fi c a r q u a l commit d e s f a z e r.
$ gi t commit - a $ gi t rever t SHA1_HASH

ir d e s f a z e r a p e n a s o commit d o hash i n f o r m a d o . E x e c u t a n d o g i t l o g r e v e l a r q u e a r e g r e s s o g r a v a d a c o m o u m n o v o commit.

Download de arquivos
O b t e n h a a c pi a d u m p r oj et o g e r e n ci a d o c o m G I T di git a n d o:
$ gi t clone gi t : / / s e r v i do r / c aminho/dos /a rqu i v o s

P o r e x e m p l o, p a r a o b t e r t o d o s o s a r q u i v o s u s a d o s p a r a c ri a r e s t e s i t e:
$ gi t clone gi t : / / gi t . o r . c z / g i tmag i c . g i t

A s e g u ir, t e r e m o s m u i t o o q u e d i z e r s o b r e o c o m a n d o c l one.

ltima Verso
S e v o c j o b t e v e a c o p i a d e u m p r o j e t o u s a n d o g i t c l one, p o d e a g o r a a t u a l i z a r p a r a a l ti m a v e r s o c o m :
$ gi t pul l

Publica o instantnea
S u p o n h a q u e v o c t e n h a e s c r it o u m script e g o s t a r i a d e c o m p a r til h a-l o. V o c p o d e r i a s i m p l e s m e n t e d i z e r p a r a p e g a r e m d o s e u c o m p u t a d o r, m a s s e o fi z e r e m e n q u a n t o v o c e s t a m e l h o r a n d o o script o u e x p e r i m e n t a d o a l g u m a s m u d a n a s , e l e s p o d e m t e r p r o b l e m a s . O b v i a m e n t e, p o r i s s o q u e e x i s t e m c i c l o s d e li b e r a o . D e s e n v o l v e d o r e s p o d e m t r a b a l h a r n u m p r o j e t o c o m f r e q u n c i a, m a s s d i s p o n i b ili z a m o c d i g o q u a n d o s e n t e m q u e o m e s m o e s t a a p r e s e n t v e l. P a r a f a z e r i s s o c o m G i t, n o d i r e t r i o o n d e e s t s e u script, e x e c u t e:
$ gi t in i t $ gi t add . $ gi t commit - m "Pr ime i r a l i be r ao "

E nt o a vis e a o s o utro s p ar a e x e c ut ar e m:

Magia Gi t

15

$ gi t clone seu.computador : / c aminho/do / s c r i p t

p a r a o b t e r s e u script. A s s u m e-s e q u e e l e s t m a c e s s o s sh. S e n o , e x e c u t e git d a e m on e a v i s e-o s p a r a e x e c u t a r:


$ gi t clone gi t : / / s e u . computador / caminho/do/ s c r i p t

A p a r t i r d e a g o r a, t o d a v e z q u e s e u script e s t i v e r p r o n t o p a r a li b e r a r, e x e c u t e:
$ gi t commit - a - m "Nova l i be r ao "

e s e u u s u r i o s p o d e m a t u a li z a r s u a s v e r s e s , i n d o p a r a o d i r e t r i o q u e c o n t m s e u script, e e x e c u t a n d o :
$ gi t pul l

S e u u s u r i o s n u n c a fi c a r o c o m u m a v e r s o d o s e u script q u e v o c n o q u e i r a. O b v i a m e n t e e s t e tr u q u e s e r v e p a r a t u d o, n o a p e n a s script.

O que eu fiz?
S a i b a q u a i s a s m u d a n a s q u e v o c f e z d e s d e o l ti m a commit c o m :
$ gi t di f f

O u d e s d e o nt e m:
$ gi t di f f "@{yes te rday} "

O u e n t r e u m a v e r s o p a r ti c u l a r e d u a s v e r s e s a t r s:
$ gi t di f f SHA1_HASH "master~2 "

Tente ta m b m:
$ gi t whatchanged - - s ince= "2 weeks ago"

A s v e z e s n a v e g o p e l o h i s t r i c o c o m o qg i t 14, e m r a z o d e s u a i n t e r f a c e m a i s f o t o g n i c a, o u c o m o t i g 15, u m a i n t e r f a c e e m m o d o t e x t o t i m a p a r a c o n e x e s l e n t a s. A l t e r n a t i v a m e n t e, i n s t a l e u m s e r v i d o r web, e x e c u t e g i t i n s t aweb e u s e u m n a v e g a d o r.

1 4 htt p://so u r c e f o r g e . n e t/p r o j e c t s/q g i t 1 5 htt p://jon a s . n i t r o . d k/ti g/

16

Um Pouco De Clonagem

Um Pouco De Clonagem
E m s i s t e m a s d e c o n t r o l e d e v e r s e s m a i s a n t i g o s , checkout a o p e r a o p a d r o p a r a s e o b t e r a r q ui v o s. O b t e n d o a s si m o s a r q ui v o s d o p o n t o d e s al v a m e n t o inf or m a d o. N o G i t e e m o u t r o s s i s t e m a s d i s t ri b u d o s d e c o n t r o l e d e v e r s e s , c l o n a g e m a o p e r a o p a d r o. P a r a o b t e r o s a r q u i v o s c l o n a s s e o r e p o s i t r i o i n t e i r o. E m o u t r a s p a l a v r a s, v o c p r a ti c a m e n t e f a z u m e s p e l h a m e n t o d o s e r v i d o r c e n t r a l. T u d o o q u e s e p o d e f a z e r n o r e p o s i t ri o p r i n c i p a l, v o c p o d e f a z e r n o s e u r e p o s i t ri o l o c a l.

Sincronizando Computadore s
E s t a f o i a r a z o p e l a q u a l u s e i o G i t p e l a p r i m e i r a v e z . E u p o s s o a g u e n t a r f a z e r tarball16 o u u s a r o r s ync p a r a backup e s i n c r o n i z a e s b s i c a s . M a s a s v e z e s e d i t o n o m e u laptop, o u t r a s n o m e u desktop, e o s d o i s p o d e m n o t e r c o n v e r s a d o e n t r e s i n e s s e p e r o d o. I n i c i a li z e u m r e p o s i t r i o G i t e commit s e u s a r q u i v o s e m u m a d a s m a q u i n a s . E n t o n a o u tr a:
$ gi t clone outro . computador : / c aminho/dos / a rqu i v o s

p a r a c r i a r u m a s e g u n d a c o p i a d o s s e u s a r q u i v o s e d o r e p o s i t ri o G i t. A p a r ti r d e a g o r a , u s e:
$ gi t commit - a $ gi t pul l outro . computador : / c aminho/dos / a rqu i v o s

o q u e d e i x a r o s a r q u i v o s d a m a q u i n a e m q u e v o c e s t tr a b a l h a n d o , n o m e s m o e s t a d o q u e e s t o n o o u t r o c o m p u t a d o r. S e v o c r e c e n t e m e n t e f e z a l g u m a a l t e r a o c o n f lit a n t e n o m e s m o a r q u i v o, o G i t l h e i n f o r m a r e v o c p o d e r f a z e r u m n o v o commit e e n t o e s c o l h e r o q u e f a z e r p a r a r e s o l v -l o.

Controle cls si c o de cdigo


I n i c i a li z e u m r e p o s i t r i o G i t p a r a s e u s a r q u i v o s :
$ gi t in i t $ gi t add . $ gi t commit - m "Commit in i c i a l "

N o s e r v i d o r p r i n c i p a l, i n i c i a li z e u m r e p o s i t ri o G i t e m b r a n c o c o m o m e s m o n o m e , e i n i c i e o daemon G i t s e n e c e s s r i o:
$ GIT_DIR=pro j . g i t gi t in i t $ gi t daemon - - detach # Ele pode j estar sendo executado
1 6 htt p://pt. wi ki p e d i a . o r g/ w i k i/T A R

Magia Gi t

17

A l g u m a s h o s p e d a g e n s p u b li c a s , t a i s c o m o o r e p o . o r . c z , t e r o m t o d o s d i f e r e n t e s p a r a c o n f i g u r a r o r e p o s i t r i o i ni c i a l e m b r a n c o , c o m o a t r a v s d o p r e e n c h i m e n t o d e u m f o r m u l ri o n o s i t e d e l e s . M a n d e s e u p r oj et o p a r a o s e r vi d or p ri n ci p al c o m:
$ gi t push gi t : / / serv i do r . p r i n c i p a l / c am inho/do /pro j . g i t HEAD

E s t a m o s p r o n t o s . P a r a v e r ifi c a r o s f o n t e s , u m d e s e n v o l v e d o r p o d e d i g i t a r:
$ gi t clone gi t : / / serv i do r . p r i n c i p a l / c am inho/do /pro j . g i t

A p s r e a li z a r a s a l t e r a e s , o c d i g o e n v i a d o p a r a o s e r v i d o r c o m :
$ gi t commit - a $ gi t push

S e o s e r v i d o r p r i n c i p a l ti v e r s i d o a t u a li z a d o e n q u a n t o r e a li z a v a a s a l t e r a e s , s e r n e c e s s r i o o b t e r a l ti m a v e r s o a n t e s d e e n v i a r a s a l t e r a e s . P a r a s i n c r o n i z a r p a r a a l ti m a v e r s o :
$ gi t commit - a $ gi t pul l

Fazendo um Fork17 do Projeto


C h a t e a d o c o m a r u m o q u e o p r oj et o e st a t o m a n d o? A c h a q u e p o d e f a z er o tra b al h o m e l h o r? E n t o n o s e u s e r v i d o r:
$ gi t clone gi t : / / serv i do r . p r i n c i p a l / c am inho/dos /a rqu i v o s

E m s e g u i d a a v i s e a t o d o s s o b r e s e u fork d o p r o j e t o n o s e u s e r v i d o r. Q u a l q u e r h o r a d e p o i s, v o c p o d e m e s c l a r (merge) s u a s m u d a n a s d o p r o j e t o o r i g i n a l n o m e s m o c o m:
$ gi t pul l

Backup Supremo s
G o s t a r i a d e n u m e r o s o s a r q u i v o s g e o g r a fi c a m e n t e d i s p e r s o s , r e d u n d a n t e s e a n t if a l s i fi c a e s ? S e s e u p r o j e t o t e m m u i t o s d e s e n v o l v e d o r e s , n o f a a n a d a! C a d a c l o n a g e m d o s e u c d i g o u m backup e f e ti v o. E n o a p e n a s u m a c p i a d o e s t a d o a t u a l, e s i m o h i s t r i c o c o m p l e t o d o s e u p r o j e t o. G r a a s a o hash c r i p t o g r f i c o, s e c a d a c l o n a g e m f o r c o r r o m p i d a, e l e s e r i d e n tifi c a d o a s s i m q u e t e n t a r s e c o m u n i c a r c o m o s o u t r o s . S e s e u p r o j e t o n o t o p o p u l a r, e n c o n t r e q u a n t o s s e r v i d o r e s p u d e r p a r a h o s p e d a r s e u s cl o n e s.
1 7 htt p://pt. wi ki p e d i a . o r g/ w i k i/F o r k

18

Um Pouco De Clonagem

U m p a r a n o i c o v e r d a d e i r o s e m p r e a n o t a r o s l ti m o s 2 0 byte d o hash S H A 1 d o c a b e a l h o (HEAD) e m a l g u m l u g a r s e g u r o. T e m q u e s e r s e g u r o, e n o p r i v a d o . P o r e x e m p l o, p u b li c a-l o e m u m j o r n a l f u n c i o n a b e m , p o i s m u i t o d i f c il p a r a u m a t a c a n t e a l t e r a r t o d a s a s c p i a s d e u m j o r n a l.

Multitarefa na velocidade da luz


D i g a m o s q u e v o c q u e i r a t r a b a l h a r e m d i v e r s a s f u n e s e m p a r a l e l o. E n t o f a a u m commit d o s e u p r o j e t o e x e c u t a n d o :
$ gi t clone . /a l gum/novo/d i r e t r i o

G i t e x p l o r a, a t o n d e f o r s e g u r a m e n t e p o s s v e l, hard links e c o m p a r til h a m e n t o d e a r q u i v o s p a r a c r i a r e s t e c l o n e, a s s i m i s t o d e v e fi c a r p r o n t o e m u m i n s t a n t e, e v o c p o d e a g o r a t r a b a l h a r e d u a s f u n e s i n d e p e n d e n t e s s i m u l t a n e a m e n t e. P o r e x e m p l o, v o c p o d e e d i t a r u m c l o n e e n q u a n t o o o u t r o c o m p i l a d o. A q u a l q u e r m o m e n t o, v o c p o d e f a z e r u m commit e p e g a r a s a l t e r a e s d e o u t r o c l o n e


$ gi t pul l /o /out ro / c l o ne

Controle de Verse s de Guerrilha


V o c e s t t r a b a l h a n d o e m u m p r o j e t o q u e u t ili z a o u t r o s i s t e m a d e c o n t r o l e d e v e r s e s , s o f r e r a p e r d a d o G i t? I n i c i a li z e u m r e p o s i t r i o G i t n o s e u d i r e t r i o d e t r a b a l h o:
$ gi t in i t $ gi t add . $ gi t commit - m "Commit in i c i a l "

c l o n e-o , n a v e l o c i d a d e d a l u z:
$ gi t clone . /a l gum/novo/d i r e t r i o

A g o r a v a i p a r a o n o v o d i r e t r i o e t r a b a l h e n e l e, n o n o a n t e r i or, u s a n d o G i t p a r a f e li c i d a d e g e r a l d a n a o . D e v e z e m q u a n d o v o c d e s e j a r s i n c r o n i z a r c o m o s o u t r o s , n e s t e c a s o , v p a r a o d i r e t ri o o r i g i n a l, s i n c r o n i z e u s a n d o o o u t r o s i s t e m a d e c o n t r o l e d e v e r s e s , e e n t o d i g it e:
$ gi t add . $ gi t commit - m "S i nc r on i z ando com os outro s "

D e p o i s v p a r a o n o v o d i r e t ri o e e x e c u t e:
$ gi t commit - a - m "Descr i o das minhas al te r aes " $ gi t pul l

O p r o c e di m e n t o p a r a e n vi a r s u a s alt er a e s p a r a o s o u tr o s d e p e n d e d o o u tr o si st e m a d e c o nt r ol e d e v e r s e s. O n o v o dir et ri o c o n t m o s a r q ui v o s c o m a s s u a s alt er a e s. E x e c u t e q u al q u e r c o m a n d o d o o u tr o si st e m a d e c o n tr ol e d e v e r s e s n e c e s s ri o p a r a

Magia Gi t

19

e n v i a-l a s p a r a o r e p o s i t ri o c e n t r a l. O c o m a n d o g i t s vn a u t o m a t i z a t u d o i s s o p a r a r e p o s i t ri o s S u b v e r s i o n, e t a m b m p o d e s e r u t ili z a d o p a r a e x p o r t a r u m r e p o s i t r i o G i t p a r a u m r e p o s i t ri o S u b v e r s i o n 1 8 .

1 8 htt p://go o g l e- o p e n s o u r c e . b l o g s p o t . c o m / 2 0 0 8/05/ex p o r t- git-pr oj e c t- to-go o g l e- co d e . h t m l

20

Bruxar i a Com Branch

Bruxar i a Com Branch


R a m i f i c a e s (Branch) e m e s c l a g e n s (merge) i n s t a n t n e o s s o a s c a r a c t e r s ti c a s m a s f a n t s t i c a s d o G i t. Proble m a : F a t o r e s e x t e r n o s i n e v i t a v e l m e n t e e x i g e m m u d a n a s d e c o n t e x t o. U m e r r o g r a v e q u e s e m a n i f e s t a s e m a v i s o, e m u m a v e r s o j li b e r a d a . O p r a z o fi n a l d i m i n u d o . U m d e s e n v o l v e d o r q u e o a j u d a, e m u m a f u n o c h a v e d o s e u p r o j e t o, p r e c i s a s a ir. E m t o d o s o s c a s o s, v o c a b r u p t a m e n t e d ei x a r d e la d o o q u e e s t a f a z e n d o e f o c a r e m u m a t a r e f a c o m p l e t a m e n t e d i f e r e n t e. I n t e r r o m p e r s u a li n h a d e p e n s a m e n t o p r o v a v e l m e n t e p r e j u d i c a r s u a p r o d u t i v i d a d e , e q u a n t o m a i s t r a b a l h o s o t r o c a r d e c o n t e x t o, m a i o r a p e r d a . C o m u m c o n t r o l e d e v e r s e s c e n t r a li z a d o p r e c i s a m o s p e g a r u m a n o v a c p i a d o s e r v i d o r c e n t r a l. S i s t e m a s d i s t ri b u d o s f a z e m m e l h o r, j q u e p o d e m o s c l o n a r o q u e q u i s e r m o s l o c a l m e n t e. M a i s c l o n a r a i n d a i m p li c a c o p i a r t o d o o d i r e t ri o d e tr a b a l h o, b e m c o m o t o d o o h i s t ri c o a t o p o n t o d e t e r m i n a d o. M e s m o o c u st o r e d u zi d o n o e s p a o u s a d o p el o s a r q ui v o s q u e o G i t t e m c o m o c o m p a r til h a m e n t o d e s t e s a r q u i v o s , o s a r q u i v o s d o p r o j e t o e m s i s o r e c r i a d o s n a i n t e g r a n o n o v o d i r e t ri o. S o lu o : O G i t t e m a m e l h o r f e r r a m e n t a p a r a e s t a s s i t u a e s q u e m u i t o m a i s r p i d a e m a i s e f i c i e n t e n o u s o d e e s p a o d o q u e a c l o n a g e m : g i t b ranch. C o m e s t a p a l a v r a m g i c a, o s a r q u i v o s e m s e u d i r e t ri o d e r e p e n t e m u d a m d e f o r m a , d e u m a v e r s o p a r a o u t r a. E s t a tr a n s f o r m a o p o d e f a z e r m a i s d o q u e a p e n a s a v a n a r o u r e t r o c e d e r n o h i s t ri c o. S e u s a r q u i v o s p o d e m m u d a r a p a r ti r d a l ti m a li b e r a o p a r a a v e r s o e x p e r i m e n t a l, p a r a a v e r s o a t u a l m e n t e e m d e s e n v o l v i m e n t o, o u p a r a a v e r s o d o s s e u s a m i g o s , e t c.

A tecla chefe
S e m p r e j o g u e u m d e s s e s j o g o s q u e a o a p e r t a r d e u m b o t o (a t e c l a c h e f e), a t e l a i n s t a n t a n e a m e n t e m u d a r p a r a u m a p l a n il h a o u a l g o m a i s s r i o. A s s i m s e o c h e f e p a s s a r p e l o s e u e s c r it ri o e n q u a n t o v o c e s ti v e r j o g a n d o , p o d e r r a p i d a m e n t e e s c o n d e r o j o g o . E m a l g u m d i r e t r i o:
$ $ $ $ echo "Sou mais esper to que meu chefe " > meuarquivo . t x t gi t in i t gi t add . gi t commit - m "Commit in i c i a l "

C r i a m o s u m r e p o s i t ri o G i t q u e r a s t r e a r u m a r q u i v o t e x t o c o n t e n d o u m a c e r t a m e n s a g e m . A g o r a d i g i t e:
$ gi t checkout - b chefe # nada parece ter mudado aps i s t o $ echo "Meu chefe mais esper to que eu" > meuarquivo . t x t $ gi t commit - a - m "Outro commit"

Magia Gi t

21

fi c o u p a r e c e n d o q u e n s s o b r e s c r e v e m o s n o s s o a r q u i v o e fi z e m o s u m commit. M a s i s t o u m il u s o . D i g i t e:
$ gi t checkout master # troca para a verso or i g i na l do arqu ivo

e t c h a m t c h a m t c h a m! O a r q u i v o t e x t o f o i r e s t a u r a d o. E s e o c h e f e d e c i d i r r o n d a r e s t e d i r e t ri o. D i g i t e:
$ gi t checkout chefe # troca para verso adaptada para agradar o chefe

V o c p o d e t r o c a r e n t r e a s d u a s v e r s e s d o a r q u i v o q u a n t a s v e z e s q u i s e r, e f a z e r commit i n d e p e n d e n t e s p a r a c a d a u m a .

Trabalho porco
D i g a m o s q u e v o c e s t t r a b a l h a n d o e m a l g u m a f u n o, e p o r a l g u m a r a z o, p r e c i s a v olt ar p a r a u m a a n ti g a v e r s o e t e m p o r a ri a m e n t e c ol o c a r al g u m a s d e cl ar a e s d e c o n t r o l e p a r a v e r c o m o a l g o f u n c i o n a . E n t o:
$ gi t commit - a $ gi t checkout SHA1_HASH

A g o r a v o c p o d e a d i c i o n a r t e m p o r a r i a m e n t e c d i g o f ei o e m t o d o c a n t o. P o d e a t f a z e r commit d e s t a s m u d a n a s . Q u a n d o e s ti v e r t u d o p r o n t o,
$ gi t checkout master

p a r a v o l t a r p a r a o tr a b a l h o o r i g i n a l. O b s e r v e q u e q u a l q u e r m u d a n a s e m commit s o t e m p o r r i a s. E s e v o c d e s e j a s s e s a l v a r a s m u d a n a s t e m p o r r i a s d e p o i s d e t u d o ? F c il:
$ gi t checkout - b suje i r a

e f a a commit a n t e s d e v o l t a r a o branch master. S e m p r e q u e q u i s e r v o l t a r s u j e i r a, s i m p l e s m e n t e d i g it e:


$ gi t checkout suje i r a

N s j f a l a m o s d e s t e c o m a n d o n u m c a p t u l o a n t e r i o r, q u a n d o d i s c u t i m o s c a r r e g a m e n t o d e a n t i g o s e s t a d o s s a l v o s . F i n a l m e n t e p o d e m o s c o n t a r t o d a a h i s t ri a: o s a r q u i v o s m u d a m p a r a o e s t a d o r e q u i s i t a d o, p o r m s a m o s d o branch master. C a d a commit r e a li z a d o a p a r ti r d e s t e p o n t o n o s s e u s a r q u i v o s o l e v a r o e m o u t r a d i r e o, q u e n o m e a r e m o s m a i s a d i a n t e. E m o u t r a p a l a v r a s, d e p o i s d e f a z e r checkout e m u m e s t a d o a n t i g o, o G i t a u t o m a t i c a m e n t e o c o l o c a r e m u m n o v o branch n o i d e n tifi c a d o , q u e p o d e s e r i d e n t i fi c a d o e s a l v o c o m git c he ck out -b.

22

Bruxar i a Com Branch

Corree s rpida s
V o c e s t a f a z e n d o a l g o q u a n d o m a n d a m l a r g a r o q u e q u e r q u e s e j a e c o r ri g i r u m e r r o r e c m d e s c o b e r t o:
$ gi t commit - a $ gi t checkout - b correes SHA1_HASH

E n t o a s s i m q u e ti v e r c o r ri g i d o o e r r o:
$ gi t commit - a - m "Er ro corr i g i d o " $ gi t push # envia para o repos i t r i o $ gi t checkout master pr inc i pa l

e v o l t e a t r a b a l h a r n o q u e e s t a v a f a z e n d o a n t e r i o r m e n t e.

Fluxo ininterrupto
A l g u n s p r o j e t o s r e q u e r e m q u e s e u c d i g o s e j a r e v i s a d o a n t e s q u e o e n v i e. P a r a t o r n a r a v i d a f c il d a q u e l e s q u e f o r e m r e v i s a r s e u c d i g o, s e v o c t e m u m a g r a n d e m u d a n a p a r a f a z e r, v o c p o d e q u e b r a e m d o i s o u m a i s p a r t e s , e t e r c a d a p a r t e r e v i s a d a s e p a r a d a m e n t e. E s e a s e g u n d a p a r t e n o p u d e r s e r e s c r it a a t q u e a p r i m e i r a s e j a a p r o v a d a e r e v i s a d a ? E m m u i t o s s i s t e m a s d e c o n t r o l e d e v e r s e s , v o c t e ri a q u e m a n d a r a p r i m e i r a p a r t e p a r a o s r e v i s o r e s, e a g u a r d a r a t q u e s e j a a p r o v a d a p a r a e n t o c o m e a r a s e g u n d a p a r t e. A t u al m e n t e is s o n o v e r d a d e, m a s n e st e s si st e m a s d e e di o d a s e g u n d a p a rt e a n t e s d a p r i m e i r a s e r a p r o v a d a e n v o l v e m u i t o s o f ri m e n t o e p r i v a e s . N o G i t, o s branch e merge s o i n d o l o r e s (ter m o t c n i c o p a r a r p i d o e l o c a l). E n t o a p s f a z e r o commit d a p r i m e i r a p a r t e e e n v i a d o p a r a r e v i s o:
$ gi t checkout - b par te2

E m s e g u i d a, c o d i fi q u e a s e g u n d a p a r t e d a g r a n d e m u d a n a s e m e s p e r a r q u e a p r i m e i r a p a r t e t e n h a s i d o a c e i t a. Q u a n d o a p r i m e i r a p a r t e f o r a p r o v a d a e e n v i a d a ,
$ gi t checkout master $ gi t merge par te2 $ gi t branch - d par te2 # no prec i s a r mais deste branch

e a s e g u n d a p a r t e d a s m u d a n a s e s t p r o n t a p a r a s e r r e v i s a d a. M a i s e s p e r e! E s e n o f o r t o s i m p l e s ? D i g a m o s q u e v o c c o m e t e u e m e r r o n a p r i m e i r a p a r t e, q u e v o c t e m q u e c o r ri g i r a n t e s d e e n v i a-l a. S e m p r o b l e m a! P r i m e i r o, v o l t e p a r a branch master c o m :


$ gi t checkout master

Magia Gi t

23

C o r r ij a o p r o b l e m a d a p r i m e i r a p a r t e d a s m u d a n a s e a g u a r d e a a p r o v a o . S e n o s i m p l e s m e n t e r e p i t a e s t e p a s s o . V o c p r o v a v e l m e n t e d e s e j a r f a z e r u m merge d a v e r s o c o r ri g i d a d a p r i m e i r a p a r t e c o m a s e g u n d a , l o g o:
$ gi t checkout par t2e $ gi t merge master

A g o r a c o m o a n t e ri o r m e n t e. L o g o q u e a p r i m e i r a p a r t e f o r a p r o v a d a e e n v i a d a :
$ gi t checkout master $ gi t merge par te2 $ gi t branch - d par te2

e , n o v a m e n t e, a s e g u n d a p a r t e e s t p r o n t a p a r a a r e v i s o . f c il e s t e n d e r e s t e t r u q u e p a r a q u a l q u e r n m e r o d e p a r t e s .

Reorganizando uma improvis a o


T a l v e z v o c g o s t e d e tr a b a l h a r c o m t o d o s o s a s p e c t o s d e u m p r o j e t o n u m m e s m o branch. E g o s t a r i a d e t r a b a l h a r e q u e o s o u t r o s s v e j a m s e u s commit, a p e n a s q u a n d o e l e s e s t i v e r e m o r g a n i z a d o s . I n i c i e u m p a r d e branch:
$ gi t checkout - b organ i zado $ gi t checkout - b desorgan i z ado

A s e g u i r, t r a b a l h e e m a l g u m a c o i s a: c o r ri g i n d o e r r o s, a d i c i o n a n d o f u n e s , a d i c i o n a n d o c d i g o t e m p o r r i o, e a s s i m p o r d i a n t e, f a a commit m u i t a s v e z e s a o l o n g o d o c a m i n h o . E n t o:
$ gi t checkout organ i zado $ gi t cherry - pick SHA1_HASH

a p l i q u e u m d a d o commit a o branch "or g a n i z a d o". C o m o s cherry-picks a p r o p r i a d o s v o c p o d e c o n s t r u i r u m branch q u e c o n t m a p e n a s c d i g o p e r m a n e n t e, e t e m commit r el a ci o n a d o s a g r u p a d o s ju nt o s.

Gerenciando o Branch
D i g i t e:
$ gi t branch

p a r a li s t a r t o d o s o s branch. H s e m p r e u m branch c h a m a d o "master", e v o c c o m e a p o r a q u i, p o r default. A l g u n s d e f e n d e m q u e o branch master d e v e s e r i n t o c v e l e c r i a r n o v o s branch p a r a s u a s p r p r i a s m u d a n a s . A s o p e s -d e - m p e r m i t e m a v o c d e l e t a r o u m o v e r (re n o m e a r) u m branch. V e j a g i t he lp branch.

24

Bruxar i a Com Branch

Branch Temporrios
D e p o i s d e u m t e m p o v o c p e r c e b e r q u e e s t c r i a n d o branch d e c u r t a d u r a o , f r e q u e n t e m e n t e e p o r m o t i v o s p a r e c i d o s : c a d a n o v o branch s e r v e a p e n a s p a r a g u a r d a r o e s t a d o a t u a l, a s s i m v o c p o d e r a p i d a m e n t e v o l t a r p a r a e s t a d o s a n t i g o s p a r a c o r ri g i r u m e rr o o u al g o a s si m. a n l o g o a m u d a r o c a n al d a T V t e m p o r a ri a m e n t e p a r a v e r o q u e e st a p a s s a n d o n o s o u t r o s c a n a i s. M a s , a o i n v s d e a p e r t a r d o i s b o t e s , v o c e s t a c r i a n d o , c h e c a n d o e a p a g a n d o branch t e m p o r r i o s e s e u s commit. F e l i z m e n t e, o G i t t e m u m a t a l h o q u e t o c o n v e ni e nt e c o m o u m c o ntr ol e r e m o t o d e T V:
$ gi t stash

I s t o s a l v a o e s t a d o a t u a l n u m l o c a l t e m p o r r i o (u m stash) e r e s t a u r a o e s t a d o a n t e r i o r. S e u d i r e t r i o d e t r a b a l h o p a r e c e t e r v o l t a d o a o e s t a d o a n t e ri o r m e n t e s a l v o, e v o c p o d e c o r ri g i r e r r o s , p u x a r a s m u d a n a s m a i s n o v a s , e a s s i m p o r d i a n t e. Q u a n d o q u i s e r r e t o r n a r a o e s t a d o a n t e r i o r a o u s o d o stash, d i g i t e:
$ gi t stash apply # Pode ser prec i so reso l ve r alguns conf l i t o s .

V o c p o d e t e r m l ti p l o s stash, e m a n i p u l a-l o s d e v r i a s f o r m a s . V e j a g i t he lp s t a sh. C o m o d e v e t e r a d i v i n h a d o , o G i t u s a branch p o r tr a z d o s p a n o s p a r a f a z e r e s t e tr u q u e.

Trabalhe como quiser


A p l i c a e s c o m o M o z ill a F i r e f o x 1 9 p e r m i t e m q u e s e a b r a m l ti p l a s a b a s e m l t i p l a s j a n e l a s. A l t e r n a n d o e n t r e a s a b a s t e m o s d i f e r e n t e s c o n t e d o s n a m e s m a j a n e l a. Branch n o G i t s o c o m o a b a s p a r a s e u d i r e t ri o d e tr a b a l h o. S e g u i n d o n a a n a l o g i a, a c l o n a g e m n o G i t c o m o a b r i r u m a n o v a j a n e l a. S e r c a p a z d e f a z e r a m b o s , m e l h o r a a e x p e r i n c i a d o u s u r i o. N u m n v e l m a i s a l t o: v r i o s g e r e n c i a d o r e s d e j a n e l a s n o li n u x 2 0 p e r m i t e m a e x i s t n c i a d e v r i a s r e a s d e t r a b a l h o: e i n s t a n t a n e a m e n t e a l t e r n a r e n t r e e l a s . O q u e s i m i l a r a o branch n o G i t, e n q u a n t o a c l o n a g e m s e r i a c o m o a n e x a r o u t r o m o n i t o r p a r a g a n h a r m a i s u m a r e a d e tr a b a l h o. O u t r o e x e m p l o o u t ilit ri o s c reen 21. E s t a p r e c i o s i d a d e l h e p e r m i t e c r i ar, d e s t r u i r e a l t e r n a r e n t r e m l ti p l a s s e s s e s d e t e r m i n a i s n o m e s m o t e r m i n a l. A o i n v s d e a b r i r n o v o s t e r m i n a i s (cl o n e), v o c p o d e u s e o m e s m o s e u s a r o s c reen (branch). N a r e a li d a d e , v o c p o d e f a z e r m u i t o m a i s c o m o s c reen m a s i s s o a s s u n t o p a r a o u t r o t e x t o. C l o n a g e m , branch e merge s o r p i d o s e l o c a i s n o G i t, e n c o r a j a n d o-o a u s a r a c o m b i n a o q u e m a i s l h e c o n v ir. G i t d e i x a v o c tr a b a l h a r e x a t a m e n t e c o m o q u i s e r.
1 9 htt p://ww w . m o z i l l a . c o m/ 20 htt p://ww w .li n u x . o r g 2 1 htt p://ww w . g n u . o r g/s o f t w a r e/ s c r e e n/

Magia Gi t

25

Lies De His to r i a
U m a c o n s e q u n c i a d a n a t u r e z a d i s t ri b u d a d o G i t q u e o h i s t r i c o p o d e s e r e d i t a d o f a c il m e n t e . M a s s e v o c a d u l t e r a r o p a s s a d o , t e n h a c u i d a d o : a p e n a s r e s c r e v a a p a r t e d o h i s t r i c o q u e s v o c p o s s u i. A s s i m c o m o a s n a e s s e m p r e a r g u m e n t a m s o b r e q u e m c o m e t e a t r o c i d a d e s , s e a l g u m ti v e r u m c l o n e c u j a v e r s o d o h i s t ri c o s e j a d i f e r e n t e d o s e u , v o c p o d e t e r p r o b l e m a s p a r a c o n c ili a r s u a s r v o r e s q u a n d o i n t e r a g i r e m . C l a r o, s e v o c c o n t r ol a r t o d a s a s o u t r a s r v o r e s t a m b m , e n t o n o h p r o bl e m a, u m a v e z q u e p o d e s o b r e p o r-l a s. A l g u n s d e s e n v o l v e d o r e s g o s t a m d e u m h i s t r i c o i m u t v e l, c o m f al h a s o u n o . O u t r o s, q u e s u a s r v o r e s e s t e j a m a p r e s e n t v e i s a n t e s d e li b e r a-l a s a o p b li c o. O G i t c o n t e m p l a m b o s p o n t o s d e v i s t a. T a l c o m o c l o n a g e m , branch e merge, r e s c r e v e r o h i s t r i c o s i m p l e s m e n t e o u t r o p o d e r q u e o G i t l h e c o n c e d e . C a b e a v o c a u s -l o s a b i a m e n t e.

Estou correto
A c a b o u d e f a z e r u m commit, m a s q u e r i a t e r e s c r it o u m a m e n s a g e m d i f e r e n t e? E n t o e x e c u t e:
$ gi t commit - - amend

p a r a m u d a r a u l ti m a m e n s a g e m . P e r c e b e u q u e e s q u e c e u d e a d i c i o n a r u m a r q u i v o ? E x e c u t e g i t add p a r a a d i c i o n a-l o, e e n t o e x e c u t e o c o m a n d o a c i m a . Q u e r i n c l u i r m a i s a l g u m a s m o d i fi c a e s n o u l ti m o commit? F a a-a s e e n t o e x e c u t e:


$ gi t commit - - amend - a

e tem mais
S u p o n h a q u e o p r o b l e m a a n t e ri o r d e z v e z e s p i o r. A p s u m a l o n g a s e s s o o n d e f e z u m m o n t e d e commit. E v o c n o e s t m u i t o f e li z c o m a o r g a n i z a o d e l e s , e a l g u m a s d a s m e n s a g e n s d o s commit p o d e r i a m s e r r e f o r m u l a d a s . E n t o e x e c u t e:
$ gi t rebase - i HEAD~10

e o s l ti m o s 1 0 commit a p a r e c e r o e m s e u $ E D I T O R f a v o r it o. T r e c h o d e e x e m p l o:
pick 5c6eb73 Adic i onado l i nk para repo.or . c z pick a311a64 Reorgan i zadas as analog i a s em "Traba lhe como qui se r " pick 100834f Adic i onado or i gem (push targe t ) ao Makef i l e

E n t o: R e m o v a o s commit d e l e t a n d o li n h a s ;

26

Lies De His to r i a

R e o r g a n i z e o s commit r e o r g a n i z a n d o li n h a s ; S u b s t it u a p i c k p o r e d i t p a r a m o d i fi c a r a m e n s a g e m d o commit; S u b s t it u a p i c k p o r s q u a s h p a r a u n i r (merge) u m commit c o m o a n t e r i or. S e m a r c a r u m commit p a r a e d i o, e x e c u t e:


$ gi t commit - - amend

C a s o c o n t r r i o, e x e c u t e:
$ gi t rebase - - cont inue

P o r t a n t o, f a a commit c e d o e c o m f r e q n c i a: e a r r u m e t u d o f a c il m e n t e m a i s t a r d e c o m u m rebase.

Alterae s locai s por ltimo


V o c e s t a t r a b a l h a n d o e m u m p r o j e t o a t i v o. F a z a l g u n s commit l o c a i s a o l o n g o d o t e m p o , e s i n c r o n i z a c o m a r v o r e o f i c i a l c o m merge. E s t e c i c l o s e r e p e t e a l g u m a s v e z e s a t e s t a r t u d o p r o n t o p a r a s e r e n v i a d o r v o r e c e n t r a l. M a s a g o r a o hi st ric o n o s e u cl o n e lo c al e st a u m a c o nf u s o c o m o e m a r a n h a d o d e m o d i f i c a e s l o c a i s e o f i c i a i s. V o c g o s t a ri a d e v e r t o d a s a s s u a s m o d i fi c a e s e m u m a s e o c o n t n u a e d e p o i s t o d a s a s m o d i fi c a e s o f i c i a i s. E s t e u m tr a b a l h o p a r a g i t reba se c o n f o r m e d e s c r it o a c i m a . E m m u i t o s c a s o s p o d e s e u s a r a o p o - on to e e v i t a r s u a i n t e r a o . V e j a t a m b m g i t he lp reba se c o m e x e m p l o s d e t a l h a d o s d e s t e i n c r v e l c o m a n d o . V o c p o d e d i v i d i r commit. O u a t r e o r g a n i z a r branch d e u m a r v o r e.

Rees crevendo o histrico


E v e n t u a l m e n t e, s e r n e c e s s r i o q u e s e u c o n t r o l e d e c d i g o t e n h a a l g o e q u i v a l e n t e a o m o d o S t a n l i n e s c o d e r e ti r a d a d e p e s s o a s d a s f o t o s o f i c i a i s, a p a g a n d o-o s d a h i s t r i a. P o r e x e m p l o, s u p o n h a q u e t e m o s a i n t e n o d e l a n a r u m p r o j e t o, m a s e s t e e n v o l v e u m a r q u i v o q u e d e v e s e r m a n t i d o p r i v a d o p o r a l g u m m o t i v o. T a l v e z e u d e i x e m e u n u m e r o d o c a r t o d e c r d i t o n u m a r q u i v o t e x t o e a c i d e n t a l m e n t e a d i c i o n e-o a o p r o j e t o. A p a g a-l o i n s u f i c i e n t e , p o i s, p o d e s e r a c e s s a d o p e l o s commit a n t e ri o r e s. T e m o s q u e r e m o v e r o a r q u i v o d e t o d o s o s commit:
$ gi t f i l t e r - branch - - tree - f i l t e r ' rm meu/arqu i vo / s ec r e t o ' HEAD

V e j a g i t he lp f i l t e r - b ranch, q u e d i s c u t e e s t e e x e m p l o e m o s t r a u m m t o d o m i a s r p i d o . N o g e r a l, f i l t e r - b ranch p e r m i t e q u e v o c a l t e r e g r a n d e s s e e s d o hi st ric o s c o m u m c o m a n d o. D e p o i s, v o c d e v e s u b s t it u i r o s c l o n e s d o s e u p r o j e t o p e l a v e r s o r e v i s a d a s e d e s e j a r

Magia Gi t

27

i n t e r a g i r c o m e l e s d e p o i s.

Fazendo histria
Q u e r m i g r a r u m p r o j e t o p a r a G i t? S e e l e f o r g e r e n c i a d o p o r u m a l g u m d o s s i s t e m a s m a i s c o n h e c i d o s , e n t o p o s s v e l q u e a l g u m j t e n h a e s c r it o u m script p a r a e x p o r t a r t o d o o h i s t r i c o p a r a o G i t. S e n o , d e u m a o l h a d a e m g i t f a s t - impo r t , q u e l u m t e x t o n u m f o r m a t o e s p e c i fi c o p a r a c r i a r o h i s t ri c o G i t d o z e r o. N o r m a l m e n t e u m script u s a n d o e s t e c o m a n d o f eit o a s p r e s s a s s e m m u it a fr e s c u r a e e x e c u t a d o u m a v e z, m i g r a n d o o p r oj et o d e u m a s v e z. P o r e x e m p l o, c o l e a li s t a g e m a s e g u i r n u m a r q u i v o t e m p o r r i o, c o m o / tmp/h i s t o ry:
commit ref s / heads /mas te r committer Al i ce <al i c e@example.com> Thu, 01 Jan 1970 00:00:00 +0000 data <<EOT In i t i a l commit. EOT M 100644 in l i n e hel l o . c data <<EOT #inc lude <std i o . h> int main( ) { pr in t f ( " He l l o , return 0; } EOT world ! \ n " ) ;

commit ref s / heads /mas te r committer Bob <bob@example.com> Tue, 14 Mar 2000 01:59:26 - 0800 data <<EOT Replace pr in t f ( ) with wri te ( ) . EOT M 100644 in l i n e hel l o . c data <<EOT #inc lude <uni s t d . h> int main( ) { wri te (1 , "He l l o , return 0; } EOT world ! \ n " , 14) ;

E m s e g u i d a c r i e u m r e p o s i t ri o G i t a p a r ti r d e s t e a r q u i v o t e m p o r r i o d i g it a n d o :
$ mkdir proje to ; cd proje to ; gi t in i t $ gi t fas t - import < /tmp/h i s t o r y

F a a u m checkout d a l ti m a v e r s o d o p r o j e t o c o m :
$ gi t checkout master .

28

Lies De His to r i a

O c o m a n d o g i t f a s t - expo r t c o n v e r t e q u a l q u e r r e p o s i t ri o p a r a o f o r m a t o d o g i t f a s t - impo r t , c u j o r e s u l t a d o v o c p o d e e s t u d a r p a r a e s c r e v e r s e u s e x p o r t a d o r e s , e t a m b m p a r a tr a n s p o r r e p o sit ri o s G it p a r a u m f or m a t o le g v el a o s h u m a n o s. N a v e r d a d e , e s t e s c o m a n d o s p o d e m e n v i a r r e p o s i t ri o s d e a q u i v o s d e t e x t o p o r c a n a i s e x c l u s i v a m e n t e t e x t u a i s.

Onde tudo come ou a dar errado?


V o c a c a b o u d e d e s c o b rir u m a f u n o e rr a d a e m s e u p r o g r a m a, q u e v o c s a b e c o m c e r t e z a q u e e s t a v a f u n c i o n a n d o h a l g u n s m e s e s a t r s . M e r d a! O n d e s e r q u e e s t e e r r o c o m e o u ? S e s v o c e s ti v e s s e t e s t a n d o a f u n c i o n a li d a d e q u e d e s e n v o l v e u. A g o r a t a r d e p r a r e c l a m a r. N o e n t a n t o, s e v o c e s ti v e r f a z e n d o commit, o G i t p o d e l o c ali z a r o p r o bl e m a:
$ gi t bi sec t star t $ gi t bi sec t bad SHA1_DA_VERSAO_ERRADA $ gi t bi sec t good SHA1_DA_VERSAO_CERTA

O G i t v e r i fi c a u m e s t a d o i n t e r m e d i ri o e n t r e a s d u a s v e r s e s . T e s t a a f u n o , e s e a i n d a e s t i v e r e r r a d a:
$ gi t bi sec t bad

S e n o , s u b s t it u a b a d p o r g o o d . O G i t n o v a m e n t e o l e v a r a t u m e s t a d o i n t e r m e d i ri o e n t r e a s v e r s e s d e f i n i d a s c o m o g o o d e b a d , d i m i n u i n d o a s p o s s i b ili d a d e s . A p s a l g u m a s it e r a e s , e s t a b u s c a b i n r i a o g u i a r a t o commit o n d e c o m e o u o p r o b l e m a . U m a v e z t e r m i n a d a s u a i n v e s ti g a o , v o l t e a o e s t a d o o r i g i n a l d i g i t a n d o :
$ gi t bi sec t reset

A o i n v s d e t e s t a r t o d a s a s m u d a n a s m a n u a l m e n t e, a u t o m a t i z e a b u s c a c o m :
$ gi t bi sec t run COMANDO

O G i t u s a o v a l o r d e r e t o r n o d o c o m a n d o u t ili z a d o , n o r m a l m e n t e u m n i c o script, p a r a d e ci dir s e u m a m u d a n a g o o d o u b a d : o c o m a n d o d e v e ter mi n ar ret or n a n d o c o m o c dig o 0 s e for g o o d , 1 2 5 s e a m u d a n a for ign or v el e q u alq u er c ois a e ntre 1 e 1 2 7 s e f or b a d . U m v al or n e g a tiv o a b o rt a r a bi s s e c o. P o d e s e f a z e r m u i t o m a i s : a p g i n a d e a j u d a e x p li c a c o m o v i s u a li z a r b i s s e c e s , e x a m i n a r o u r e p r o d u z i r o log d a b i s s e c o , e e li m i n a r m u d a n a s c o n h e c i d a m e n t e in o c e nt e s p a r a a c el er a r a b u s c a.

Quem Fez Tudo Dar Errado ?


T a l c o m o o u t r o s s i s t e m a d e c o n t r o l e d e v e r s e s , o G i t t e m u m c o m a n d o b l ame (cul p a d o):
$ gi t blame ARQUIVO

Magia Gi t

29

q u e m a r c a c a d a li n h a d o a r q u i v o i n d i c a d o m o s t r a n d o q u e m o m o d i fi c o u p o r l ti m o e q u a n d o . A o c o n t r ri o d e o u t r o s s i s t e m a s d e c o n t r o l e d e v e r s e s , e s t a o p e r a o o c o r r e o f fli n e, l e n d o a p e n a s d o d i s c o l o c a l.

Experincia pes s o al
E m e m s i s t e m a d e c o n t r o l e d e v e r s e s c e n t r a li z a d o , m o d i fi c a e s n o h i s t r i c o s o o p e r a e s d i f c e i s, e d i s p o n v e i s a p e n a s p a r a a d m i n i s t r a d o r e s . C l o n a g e m , branch e merge s o i m p o s s v e i s s e m u m a r e d e d e c o m u n i c a o . R e s t a n d o a s o p e r a e s b s i c a s : n a v e g a r n o h i s t r i c o o u f a z e r commit d a s m u d a n a s . E m a l g u n s s i s t e m a s , e x i g i d o d o u s u r i o u m c o n e x o v i a r e d e , a p e n a s p a r a v i s u a li z a r s u a s p r p r i a s m o d i fi c a e s o u a b r i r u m a r q u i v o p a r a e d i o. S i s t e m a s c e n t r a li z a d o s i m p e d e m o t r a b a l h o offline, e e x i g e m u m i n f r a e s t r u t u r a d e r e d e m a i s c a r a, e s p e c i a l m e n t e q u a n d o o n u m e r o d e d e s e n v o l v e d o r e s a u m e n t a. M a i s i m p o r t a n t e, t o d a s a o p e r a e s s o m a i s l e n t a s, a t c e r t o p o n t o, g e r a l m e n t e a t o p o n t o o n d e o s u s u ri o s e vit a m c o m a n d o s m a i s a v a n a d o s a t s e r e m a b s ol ut a m e n t e n e c e s s ri o s. E m c a s o s e x tr e m o s, e s t a a r e g r a a t p a r a a m a i o ri a d o s c o m a n d o s b s i c o s . Q u a n d o o s u s u r i o s d e v e m e x e c u t a r c o m a n d o s l e n t o, a p r o d u ti v i d a d e s o f r e p o r c a u s a d e u m a i n t e r r u p o n o fl u x o d e tr a b a l h o. J e x p e r i m e n t e i e s t e f e n m e n o n a p e l e. O G i t f o i o p r i m e i r o s i s t e m a d e c o n t r o l e d e v e r s e s q u e u s e i. E r a p i d a m e n t e c r e s c i a c o s t u m a d o a e l e, t o m a n d o m u i t a s d e s u a s c a r a c t e r s ti c a s c o m o g a r a n ti a. S i m p l e s m e n t e a s s u m i q u e o s o u t r o s s i s t e m a s e r a m s e m e l h a n t e: e s c o l h e r u m s i s t e m a d e c o n t r o l e d e v e r s e s d e v e r i a s e r i g u a l a e s c o l h e r u m n o v o e d i t o r d e t e x t o o u n a v e g a d o r p a r a internet. F i q u e i c h o c a d o q u a n d o , p o s t e r i o r m e n t e, f ui f o r a d o a u s a r u m s i s t e m a c e n t r a li z a d o . M i n h a , f r e q u e n t e m e n t e r u i m , c o n e x o c o m a i n t e r n e t p o u c o i m p o r t a c o m o G i t, m a s t o r n a o d e s e n v o l v i m e n t o i n s u p o r t v e l q u a n d o p r e c i s a s e r t o c o n fi v e l q u a n t o o d i s c o l o c a l. A l m di s s o, m e c o n d i ci o n a v a a e vit a r d e t e r m i n a d o s c o m a n d o s d e vi d o a lat n ci a e n v o l v i d a , o q u e m e i m p e d i u, e m u l ti m a i n s t a n c i a, d e c o n t i n u a r s e g u i n d o m e u fl u x o d e tr a b al h o. Q u a n d o e x e c u t a v a u m c o m a n d o l e n t o, a i n t e r r u p o n a m i n h a li n h a d e p e n s a m e n t o c a u s a v a u m e n o r m e p r e j u z o. E n q u a n t o e s p e r o a c o m u n i c a o c o m o s e r v i d o r c o n c l u ir, f a o al g o p a r a p a s s a r o t e m p o, c o m o c h e c a r e m a il o u e s c r e v e r d o c u m e n t a o. N o h o r a e m r e t o r n o a t a r e f a o r i g i n a l, o c o m a n d o j h a v i a fi n a li z a d o a m u i t o t e m p o , e p e r c o m a i s t e m p o le m b r a n d o o q u e e st a v a f a z e n d o. O s s e r e s h u m a n o s s o r ui n s c o m tro c a s d e c o n t e xt o. H o u v e t a m b m u m i n t e r e s s a n t e e f e i t o d a t r a g d i a d o s c o m u n s 22: a n t e c i p a n d o o c o n g e s t i o n a m e n t o d a r e d e, o s i n d i v d u o s c o n s o m e m m a i s b a n d a q u e o n e c e s s r i o e m v a r i a s o p e r a e s n u m a t e n t a ti v a d e r e d u z i r a t r a s o s f u t u r o s . O s e s f o r o s c o m b i n a d o s i n t e n s i fi c a m o c o n g e s t i o n a m e n t o, e n c o r a j a n d o o s i n d i v d u o s a c o n s u m i r c a d a v e z m a i s b a n d a d a p r xi m a v e z p a r a e vit ar o s lo n g o s a t r a s o s.

22 htt p://pt. wi ki p e d i a . o r g/ w i k i/Tr a g d i a _ d o s _ c o m u n s

30

Gro- Mestre Git

Gro- Mestre Git


E s t e c a p i t u l o d e n o m e p o m p o s o m i n h a li x e i r a p a r a t r u q u e s d o G i t n o c l a s s i fi c a d o s .

Disponibiliza o de Cdigo
P a r a m e u s p r o j e t o s, o G i t o r g a n i z a e x a t a m e n t e o s a r q u i v o s q u e q u e r o g u a r d a r e d i s p o n i b ili z a r p a r a o s u s u r i o s . P a r a c r i a r u m tarball d o c d i g o f o n t e, e x e c u t o:
$ gi t arch i ve - - format=tar - - pref i x=pro j - 1.2.3 / HEAD

Gera o do Regi stro das Modifica e s


U m a b o a p r a ti c a m a n t e r u m r e g i s t r o d a s m o d i fi c a e s 2 3 , e a l g u n s p r o j e t o s o e x i g e m . S e v o c f a z commit c o m fr e q u n c i a, e v o c d e v e r i a f a z e r, g e r e u m r e g i s t r o d a s m o d i f i c a e s d i g it a n d o :
$ gi t log > ChangeLog

Git por S S H, HTTP 24


S u p o n h a q u e v o c t e n h a a c e s s o s s h a o s e r v i d o r web, m a s o G i t n o e s t i n s t a l a d o . E m b o r a m e n o s e f i c i e n t e q u e o s e u p r o t o c o l o n a t i v o, o G i t p o d e c o m u n i c a r s o b r e H T T P. B a i x e , c o m p il e e i n s t a l e o G i t n a s u a c o n t a, e c ri a u m r e p o s i t r i o n o s e u d i r e t ri o web:
$ GIT_DIR=pro j . g i t gi t in i t

N o d i r e t r i o p ro j . g i t , e x e c u t e:
$ gi t - - bare update- server - in f o $ chmod a+x hooks/pos t - update

D o s e u c o m p u t a d o r, f a a u m pu sh v i a s s h :
$ gi t push serv i do r .web: / caminho/para /p ro j . g i t master

o s o u t r o s p e g a m s e u p r o j e t o v i a:
$ gi t clone http : / / s e r v i do r .web/pro j . g i t

23 htt p://pt. wi ki p e d i a . o r g/ w i k i/C h a n g e l o g 24 htt p://pt. wi ki p e d i a . o r g/ w i k i/Htt p

Magia Gi t

31

Git Acima de Tudo


Q u e r s i n c r o n i z a r r e p o s i t ri o s s e m u s a r s e r v i d o r e s o u m e s m o u m a c o n e x o v i a r e d e ? P r e c i s a i m p r o v i s a r d u r a n t e u m a e m e r g n c i a? J v i m o s q u e c o m o g i t f a s t - expo r t e o g i t f a s t - impo r t p o d e m o s c o n v e r t e r r e p o s i t r i o s p a r a u m n i c o a r q u i v o e v i c e -v e r s a . P o d e m o s a r m a z e n a r e s t e s a r q u i v o s d e q u a l q u e r j eit o p a r a tr a n s p o r t a r n o s s o s r e p o s i t ri o s s o b r e q u a l q u e r m e i o, p o r m a f e r r a m e n t a m a i s e f i c i e n t e o g i t bund le . P a r a o r e m e t e n t e c r i a u m bundle (pa c o t e):
$ gi t bundle create nomedopacote HEAD

e e n t o e n v i a o bundle, nomdepaco te, p a r a o u t r o l u g a r u s a n d o o q u e q u i s e r: email, pendrive, d i s q u e t e, u m a i m p r e s s o xxd25 e u m s c a n n e r c o m O C R , l e n d o b i t s p e l o t e l e f o n e , s i n a i s d e f u m a a , e t c. O d e s t i n a t ri o r e c u p e r a o s commit d o bundle d i g i t a n d o :


$ gi t pul l nomedopacote

O d e s t i n a t r i o p o d e f a z e r i s t o a t n u m r e p o s i t r i o v a z i o. A p e s a r d o s e u t a m a n h o , nomedopaco te c o n t m t o d o o r e p o s i t r i o G i t o r i g i n a l. E m p r oj et o s g r a n d e s, di m i n u a o s r e s d u o s e m p a c o t a n d o a p e n a s a s m u d a n a s q u e e s t o f a l t a n d o n o o u t r o r e p o s i t r i o:
$ gi t bundle create nomedopacote HEAD ^COMMON_SHA1

S e r e a l i z a d o c o m f r e q u n c i a, a l g u m p o d e e s q u e c e r a p a r ti r d e q u a l commit d e v e s e r e n v i a d o . A p a g i n a d e a j u d a s u g e r e o u s o d e tags p a r a r e s o l v e r i s s o. O u s e j a d e p o i s d e e n v i a r u m bundle, d i g it e:


$ gi t tag - f ul t imobundle HEAD

e c r i e u m n o v o bundle c o m a s n o v i d a d e s :
$ gi t bundle create novobundle HEAD ^ul t imobundle

Commit do que Mudou


M o s t r a r a o G i t q u a n d o a d i c i o n a m o s , a p a g a m o s e/ o u r e n o m e a m o s a r q u i v o s p o d e s e r p r o b l e m t i c o e m a l g u n s p r o j e t o s . E m v e z d i s s o, v o c p o d e d i g it a r:
$ gi t add . $ gi t add - u

O G i t a n a li s a r o s a r q u i v o s n o d i r e t r i o a t u a l e t r a b a l h a r n o s d e t a l h e s , a u t o m a t i c a m e n t e. N o l u g a r d o s e g u n d o c o m a n d o add, e x e c u t e git commit -a s e s u a i n t e n o e f e t u a r u m commit n e s t e m o m e n t o.


25 htt p://linu x. d i e . n e t/ m a n/ 1/x x d

32 V o c p o d e e x e c ut ar ist o e m a p e n a s u m p a s s o c o m:
$ gi t l s - f i l e s

Gro- Mestre Git

- d - m - o - z | xargs - 0 gi t update- index - - add - - remove

A s o p e s - z e - 0 p r e vi n e m c o ntr a o s tra n st or n o s d e a r q ui v o s c o m c a r a ct er e s e str a n h o s n o n o m e. N o t e q u e e st e c o m a n d o a di ci o n a o s a r q ui v o s ig n o r a d o s. L o g o, v o c p o d e q u e r e r u s a r a s o p e s - x o u - X.

Meu Commit To Grande!


V o c e s q u e c e u d e f a z e r commit p o r u m m u i t o t e m p o ? F i c o u c o d i fi c a n d o f u ri o s a m e n t e e e s q u e c e u d o c o n t r o l e d e v e r s e s a t a g o r a ? F e z u m a s r i e d e m o d i fi c a e s n o r e l a c i o n a d a s e n t r e s i, p o i s e s t e s e u e s til o? N o s e p r e o c u p e , E x e c u t e:
$ gi t add - p

P a r a c a d a m o d i fi c a o r e a li z a d a, o G i t m o s t r a r o p e d a o d o c d i g o a l t e r a d o , e p e r g u n t a r s e e l e d e v e f a z e r p a r t e d o p r x i m o commit. R e s p o n d a y (si m) o u n (n o). H o u tr a s o p e s, c o m o o a di a m e n t o d e s s a d e ci s o; di git e ? p a r a a p r e n d e r c o m o. U m a v e z s a t i s f e i t o, d i g it e:


$ gi t commit

p a r a f a z e r u m commit, e x a t o, c o m a s m o d i fi c a e s a p r o v a d a s (staged). L e m b r e-s e d e r e t i r a r a o p o - a, c a s o c o n t r r i o o commit c o n t e r t o d a s a s m o d i fi c a e s . E s e v o c ti v e r e d i t a d o v r i o s a r q u i v o s e m v r i o s l o c a i s ? R e v e r c a d a m o d i fi c a o u m a p o r u m a s e r fr u s t a n t e e e n f a d o n h o . N e s t e c a s o, u s e g i t add - i , c u j a i n t e r f a c e m e n o s s i m p l e s , p o r m m a i s fl e x v e l. C o m a l g u m a s p o u c a s t e c l a s, v o c p o d e a p r o v a r o u n o v r i o s a r q u i v o s d e u m a v e z , o u r e v e r e s e l e c i o n a r a s m o d i fi c a e s e m u m a r q u i v o s e s p e c i fi c o. A l t e r n a ti v a m e n t e, e x e c ute g i t commi t - - i n t e ra c t i ve o que a u t o m a t i c a m e n t e e f e t u a r s e u s commit a s s i m q u e t e r m i n a r d e a p r o v a r.

No perca a CA B E A (HEAD )
A e t i q u e t a HEAD (ca b e a l h o) c o m o u m i n d i c a d o r q u e n o r m a l m e n t e a p o n t a p a r a o l ti m o c o m m i t, a v a n a n d o a c a d a n o v o commit. A l g u n s c o m a n d o s d o G i t p e r m i t e m m o v el a. P o r e x e m p l o:
$ gi t reset HEAD~3

ir m o v e r o HEAD t r s commit p r a tr s. A s s i m t o d o s o s c o m a n d o s d o G i t p a s s a m a a g i r c o m o s e v o c n o ti v e s s e r e a li z a d o s o s l ti m o s t r s commit, e n q u a n t o s e u s a r q u i v o s p e r m a n e c e m n o p r e s e n t e. C o n s u l t e a p a g i n a d o m a n u a l d o c o m a n d o g i t r e se t p a r a m a i s a pli c a e s.

Magia Gi t

33

M a s c o m o s e f a z p a r a v o l t a r p a r a o f u t u r o ? O s l ti m o s commit n o s a b e m d o f u t u r o. S e v o c t e m o S H A 1 d o HEAD o r i g i n a l e n t o:
$ gi t reset SHA1

M a s s u p o n h a q u e v o c n o t e n h a a n o t a d o. N o s e p r e o c u p e, p a r a c o m a n d o s d e s s e ti p o , o G i t s a l v a o H EAD o r i g i n a l c o m u m a e t i q u e t a c h a m a d a d e O RIG_H EAD , e v o c p o d e retorn ar s o e s alv o c o m:


$ gi t reset ORIG_HEAD

Explorando o HEAD
T a l v e z O RIG_HEAD n o s e j a s u f i c i e n t e. T a l v e z v o c s t e n h a p e r c e b i d o q u e f e z u m e r r o d e s c o m u n a l e p r e c i s a v o l t a r p a r a u m a n t i g o commit d e u m branch h m u i t o e s q u e ci d o. N a c o n f i g u r a o p a d r o, o G i t m a n t m u m commit p o r p e l o m e n o s d u a s s e m a n a s , m e s m o s e v o c m a n d o u o G i t d e s t r u i r o branch q u e o c o n t m . O p r o b l e m a a c h a r o hash c e r t o. V o c p o d e p r o c u r a r p o r t o d o s o s v o l a r e s d e hash e m . g i t / ob jec t s e p o r t e n t a t i v a e e r r o e n c o n t r a r o q u e p r o c u r a. M a s h u m m o d o m a i s f c il. O G i t g u a r d a r o hash d e t o d o s o s commit q u e e l e c a l c u l a e m . g i t / l o g s . O s u b -d i r e t r i o re f s c o n t m o h i s t r i c o d e t o d a a t i v i d a d e e m t o d o s o s branch, e n q u a n t o o a r q u i v o HEAD m o s t r a t o d o s o s v a l o r e s d e hash q u e t e v e. E s t e l ti m o p o d e s e r u s a d o p a r a e n c o n t r a r o hash d e u m commit n u m branch q u e t e n h a s i d o a c i d e n t a l m e n t e a p a g a d o . O c o m a n d o re f l o g f o r n e c e u m a i n t e r f a c e a m i g v e l p a r a e s t e s a r q u i v o s d e log. E x p e ri m e nt e
$ gi t ref l o g

A o i n v s d e c o p i a r e c o l a r o hash d o re f l o g , t e n t e :
$ gi t checkout "@{10 minutes ago} "

O u f a a u m checkout d o a n t e-a n t e-a n t e-a n t e p e n l ti m o commit c o m :


$ gi t checkout "@{5} "

L e i a a s e o Specifying Revisions d a a j u d a c o m g i t he lp rev- pa r se p a r a m a i s inf or m a e s. V o c p o d e q u e r e r c o n f i g u r a r u m l o n g o p e r o d o d e c a r n c i a p a r a c o n d e n a r u m commit. P o r e x e m p l o:


$ gi t conf i g gc.pruneexp i r e "30 days "

s i g n i fi c a q u e u m commit a p a g a d o s e r p e r m a n e n t e m e n t e e li m i n a d o a p s s e p a s s a d o s 3 0 d i a s e e x e c u t a d o o c o m a n d o g i t gc.

34 V o c t a m b m p o d e d e s a t i v a r a s e x e c u e s a u t o m t i c a s d o g i t gc:
$ gi t coni f g gc.auto 0

Gro- Mestre Git

a s s i m o s commit s s e r o p e r m a n e n t e m e n t e e li m i n a d o s q u a n d o e x e c u t a d o o g i t gc m a n u a l m e n t e.

Ba s e a nd o se no Git
S e g u i n d o o j eit o UNIX 26 d e s e r, o G i t p e r m i t e s e r f a c il m e n t e u tili z a d o c o m o u m c o m p o n e n t e d e b a i x o n v e l p a r a o u t r o s p r o g r a m a s . E x i s t e m i n t e r f a c e s GUI, i n t e r f a c e s web, i n t e r f a c e s a l t e r n a t i v a s p a r a li n h a d e c o m a n d o e t a l v e z e m b r e v e v o c c ri e u m script o u d o i s p a r a s u a s n e c e s s i d a d e s u s a n d o o G i t. U m t r u q u e s i m p l e s c ri a r a l i a s , a b r e v i a e s , i n t e r n o s a o G i t p a r a r e d u z i r o s c o m a n d o s u t ili z a d o s m a i s fr e q u e n t e m e n t e:
$ gi t conf i g - - globa l al i a s . c o checkout $ gi t conf i g - - globa l - - get - regexp al i a s al i a s . c o checkout $ gi t co foo # exibe os al i a s cr i ados checkout foo '

# o mesmo que ' g i t

O u t r a i m p r i m i r o branch a t u a l n o prompt, o u n o t t u l o d a j a n e l a. s i n v o c a r
$ gi t symbol i c - ref HEAD

m o s t r a o n o m e d o branch a t u a l. N a p r ti c a, m u i t o p r o v a v e l m e n t e v o c n o q u e r v e r o / re f s /head s e i g n o r a r o s e r r o s :
$ gi t symbol i c - ref HEAD 2> /dev /nu l l | cut - b 12-

V ej a a p gi n a d o G it p a r a m a i s e x e m p l o s.

Dubls Duros na Queda


A s v e r s e s r e c e n t e s d o G i t t o r n a r a m m a i s d i f c il p a r a o u s u r i o d e s t r u i r a c i d e n t a l m e n t e u m d a d o . E s t a t al v e z o p r i n c i p a l m o t i v o p a r a u m a a t u a li z a o . N o e n t a n t o, h v e z e s e m q u e v o c r e al m e n t e q u e r d e s tr uir u m d a d o. M o s tr ar e m o s m a n e ir a s d e tra n s p o r e st a s s a l v a g u a r d a s p a r a o s c o m a n d o s m a i s c o m u n s . U s e-a s a p e n a s s e v o c s a b e o q u e e s t a f a z e n d o. Checkout: S e h m o d i fi c a e s s e m commit, u m checkout s i m p l e s f a l h a r . P a r a d e s t r u i r e s t a s m o d i fi c a e s , e f a z e r u m checkout d e u m c e r t o commit a s s i m m e s m o , u s e a o p o f o r ce (- f ):
$ gi t checkout - f COMMIT

P o r o u t r o l a d o , s e f o r e s p e c i fi c a d o a l g u m e n d e r e o e m p a r ti c u l a r p a r a o checkout,
26 htt p://pt. wi ki p e d i a . o r g/ w i k i/U n i x

Magia Gi t

35

e n t o n o h a v e r c h e c a g e m d e s e g u r a n a. O e n d e r e o f o r n e c i d o s e r s il e n c i o s a m e n t e s o b r e s c r i t o. T e n h a c u i d a d o s e v o c u s a o checkout d e s s e j eit o. Reset: O Reset t a m b m f al h a n a p r e s e n a d e m o d i fi c a e s s e m commit. P a r a o b r i g al o, e x e c u t e:


$ gi t reset - - hard [COMMIT]

Branch: A p a g a r u m branch f a l h a s e i s t o l e v a r a p e r d a d a s m o d i fi c a e s . P a r a f o r a r, d i g i t e:
$ gi t branch - D BRANCH # ao invs de usar - d

A n a l o g a m e n t e, a t e n t a ti v a d e s o b r e s c r e v e r u m branch m o v e n d o-o f a l h a f o r c a u s a r a p e r d a d e d a d o s . P a r a f o r a r a m o v i m e n t a o d o branch, u s e :


$ gi t branch - M [ORIGEM] DESTINO # ao invs de usar - m

A o c o n t r r i o d o checkout e d o reset, e s t e s d o i s c o m a n d o s a d i a r o a d e s t r u i o d o s d a d o s . A s m o d i fi c a e s a i n d a s e r o a r m a z e n a d a s n o s u b d i r e t r i o . g i t , e p o d e m s e r r e s g a t a d o s , r e c u p e r a n d o o hash a p r o p r i a d o d o . g i t / l o g s (vej a a s e o " E x p l o r a n d o o H E A D " a c i m a). P o r p a d r o , e l e s s e r o m a n t i d o s p o r p e l o m e n o s d u a s s e m a n a s . Clean: A l g u n s c o m a n d o s d o G i t r e c u s a m-s e a a v a n a r d e v i d o o r e c e i o d e s o b r e s c r e v e r a r q u i v o s n o m o n i t o r a d o s (se m commit). S e v o c ti v e r c e r t e z a d e q u e t o d o s o s a r q u i v o s e d i r e t r i o s n o m o n i t o r a d o s s o d i s p e n s v e i s, e n t o a p a g u e-o s s e m m i s e r i c r d i a c o m :
$ gi t clean - f - d

D a p r x i m a v e z , o m a l d i t o c o m a n d o n o s e r e c u s a r a f u n c i o n a r!

36

Segredos Revelados

Segredos Revelados
V a m o s d a r u m a e s p i a d a s o b o c a p o e e x p li c a r c o m o o G i t r e a li z a s e u s m i l a g r e s . S e r u m a e x p l i c a o s u p e r fi c i a l. P a r a d e t a l h e s m a i s a p r o f u n d a d o s c o n s u l t a r o m a n u a l d o u s u r i o 27.

Invisibilidade
C o m o p o d e o G i t s e r t o d i s c r e t o? F o r a o c a s i o n a i s commit e merge, v o c p o d e tr a b al h a r c o m o s e d e s c o n h e c e s s e q u e e xi st e u m c o n tr ol e d e v e r s e s. I st o , a t q u e p r e c i s e d e l e , e q u a n d o v o c fi c a r a g r a d e c i d o a o G i t p o r e s t a r v i g i a n d o o q u e f a z o t e m p o t o d o. O u t r o s s i s t e m a s d e c o n t r o l e d e v e r s e s n o d e i x a m v o c e s q u e c e-l o s. A s p e r m i s s e s d o s a r q u i v o s s o a p e n a s d e l eit u r a, a m e n o s q u e v o c d i g a a o s e r v i d o r q u a i s a r q u i v o s t e m a i n t e n o d e e d i t a r. O s e r v i d o r c e n t r a l e s t a r m o n i t o r a n d o a s a e s d e q u e m f e z o checkout e q u a n d o . Q u a n d o a r e d e c a ir, v o c t e r u m s o f ri m e n t o r e p e n t i n o . D e s e n v o l v e d o r e s c o n s t a n t e m e n t e b r i g a m c o m a b u r o c r a c i a e a burrocracia v i r t u a l. O s e g r e d o o d i r e t r i o . g i t n o s e u d i r e t ri o d e t r a b a l h o. O G i t g u a r d a o h i s t r i c o d o s e u p r o j e t o n e l e. O . n o i ni c i o d o n o m e e s c o n d e e l e d e u m a li s t a g e m l s n o r m a l. E x c e t o q u a n d o v o c e s t a f a z e n d o u m push o u pull d a s m o d i fi c a e s , t o d a s a s o p e r a e s d e c o ntr ol e d e v e r s e s s o n e st e dir et ri o . V o c t e m c o n t r o l e t o t a l s o b r e o d e s ti n o d o s s e u s a r q u i v o s p o i s o G i t n o s e i m p o r t a c o m o q u e f a z a e l e s . O G i t p o d e f a c il m e n t e r e c r i a r u m e s t a d o s a l v o a p a r ti r d o . g i t a q u a l q u e r h o r a.

Integridade
A m a i o r i a d a s p e s s o a s a s s o c i a m c r i p t o g r a fi a c o m m a n t e r i n f o r m a e s s e c r e t a s , m a s o u tr a a p li c a o ig u al m e n t e i m p o rt a n t e m a n t e r a i nt e g ri d a d e d a i nf o r m a o. O u s o c o r r e t o d a s f u n e s c ri p t o g r fi c a s d e hash p o d e m p r e v e n i r o c o r r u p o a c i d e n t a l o u int e n ci o n al d o s d a d o s . U m hash S H A 1 p o d e s e r e n t e n d i d o c o m o u m n m e r o i d e n t ifi c a d o r n i c o d e 1 6 0 bits p a r a c a d a s e q u n c i a d e bytes q u e v o c v a i e n c o n t r a r n a v i d a. N a v e r d a d e m a i s q u e i s s o : p a r a c a d a s e q u n c i a d e bytes q u e q u a l q u e r s e r h u m a n o j a m a i s u s a r d u r a n t e v r i a s v i d a s . O hash d e t o d o o c o n t e d o d e u m a r q u i v o p o d e s e r v i s t o c o m o u m i d e n t ifi c a d o r nic o p ar a o m e s m o . U m a o b s e r v a o i m p o r t a n t e q u e u m hash S H A 1 , e l e m e s m o , u m a s e q u n c i a d e bytes, a s s i m n s p o d e m o s g e r a r u m hash d e s e q u n c i a s d e bytes f o r m a d a p o r o u t r o s hash.
27 htt p://ww w . k e r n e l . o r g/p u b/s o f t w a r e/ s c m/ gi t/d o c s/u s e r- m a n u a l . h t m l

Magia Gi t

37

A gr o s s o m o d o, to d o s o s ar q uiv o s m a ni p ul a d o s p el o G it s o ref er e n cia d o s p el o s e u i d e n t i fi c a d o r n i c o, e n o p o r s e u n o m e . T o d o s o s d a d o s e s t o e m a r q u i v o s n o s u b d i r e t r i o . g i t / ob j e c t s , o n d e n o h n e n h u m a r q u i v o c o m n o m e s n o r m a i s. O c o n t e d o s o s e q u n c i a s d e b y t e s c h a m a d o s d e blob e e l e s n o t e m r e l a o c o m s e u s n o m e s. S e u s n o m e s s o r e g i s t r a d o s e m o u t r o l u g a r. E l e s e s t o n o s o b j e t o s tree, q u e s o li s t a s d o s n o m e s d o s a r q u i v o s f o r m a d o s c o m o s i d e n tifi c a d o r e s d e s e u s c o n t e d o s . U m a v e z q u e o tree u m a s e q u n c i a d e bytes, e l e t a m b m t e m u m i d e n t ifi c a d o r n i c o, q u e c o m o e l e a r m a z e n a d o n o s u b d i r e t r i o . g i t / ob j e c t s . O b j e t o s Tree p o d e m a p a r e c e r n a li s t a d e o u t r o tree, l o g o, u m d i r e t ri o tree e t o d o s o s s e u s a r q u i v o s p o d e m r e p r e s e n t a d o s p o r o b j e t o s tree e blob. F i n a l m e n t e, u m commit c o n t m u m m e n s a g e m , a l g u n s i d e n tifi c a d o r e s tree e a i n f o r m a o d e c o m o e l e s e s t o r e l a c i o n a d o s e n t r e s i. U m commit t a m b m u m s e q u n c i a d e bytes, l o g o, p o s s u i u m i d e n t ifi c a d o r n i c o . V e j a v o c m e s m o : p e g u e q u a l q u e r hash d o d i r e t ri o . g i t / o b j e c t s , d i g i t e
$ gi t cat - f i l e - p SHA1_HASH

A g o r a s u p o n h a q u e a l g u m t e n t a r e e s c r e v e r o h i s t ri c o e t e n t a m o d i fi c a r o c o n t e d o d e u m a r q u i v o d e u m a v e r s o a n t i g a. E n t o o i d e n t ifi c a d o r n i c o d o a r q u i v o s o f r e r m o d i f i c a e s j q u e a g o r a e l e u m a s e q u n c i a d e bytes d i f e r e n t e. I s t o m o d i fi c a o i d e n t i fi c a d o r d e q u a l q u e r o b j e t o tree r e f e r e n t e a e s t e a r q u i v o, q u e p o r s u a v e z m o d i fi c a o i d e n t i fi c a d o r d e t o d o s o s o b j e t o s commit e n v o l v e n d o e s t e tree. A c o r r u p o d o r e p o s i t ri o r u i m e x p o s t a q u a n d o t o d o s r e c e b e m t o d o s o s commit j q u e o a r q u i v o m a n i p u l a d o t e m o i d e n t i fi c a d o r e r r a d o . I g n o r e i d e t a l h e s c o m o a s p e r m i s s e s e a s s i n a t u r a s d o a r q u i v o. M a s , e m s u m a , e n q u a n t o o s 2 0 bytes r e p r e s e n t a n d o o l ti m o commit f o r e m s e g u r o, i m p o s s v e l d e e n g a n a r u m r e p o s i t ri o G i t .

Inteligncia
C o m o o G it s a b e q u e u m a r q ui v o f oi r e n o m e a d o, m e s m o s e v o c n u n c a m e n ci o n o u o f a t o e x p l i c i t a m e n t e ? C o m c e r t e z a, v o c e x e c u t o u g i t mv, m a s i s t o e x a t a m e n t e o m e s m o q u e u m g i t rm s e g u i d o p o r u m g i t a d d . A a n a l i s e h e u r s ti c a d o G i t v e r i fi c a a l m d a s a e s d e r e n o m e a r e d e c o p i a s s u c e s s i v a s e n t r e v e r s e s . D e f a t o, e l e p o d e d e t e c t a r p e d a o s d e c d i g o s e n d o m o v i d o s o u c o p i a d o s e n t r e a r q u i v o s! E m b o r a n o c u b r a t o d o s o s c a s o s , f a z u m tr a b a l h o d e c e n t e, e e s t a c a r a c t e r s ti c a e s t s e n d o s e m p r e a p r i m o r a d a . C a s o n o f u n c i o n e c o m v o c , t e n t e h a b i lit a r o p e s m a i s r e fi n a d a s p a r a d e t e c o d e c p i a s e c o n s i d e r e u m a a t u a li z a o .

Indexando
P a r a c a d a a r q ui v o m o n it or a d o, o G it a r m a z e n a inf or m a e s c o m o: t a m a n h o, h o r a d e

38

Segredos Revelados

c r i a o e l ti m a m o d i fi c a o, e m u m a r q u i v o c o n h e c i d o c o m o index. P a r a d e t e r m i n a r s e u m a r q u i v o f o i m o d i fi c a d o , o G i t c o m p a r a s e u s s t a t u s a t u a l c o m o q u e t e m n o index. S e c o i n c i d e m , e n t o e l e p o d e i g n o r a r o a r q u i v o. J q u e v e r i fi c a e s d e s t a t u s s o i m e n s a m e n t e m a i s b a r a t a s q u e l e r o c o n t e d o d o a r q u i v o , s e v o c e d i t a r p o u c o s a r q u i v o s , o G i t v a i a t u a li z a r s e u s s t a t u s q u a s e q u e i n s t a n t a n e a m e n t e.

Repo sitrios Crus


V o c p o d e e s t a r i m a g i n a n d o q u e f o r m a t o o r e p o s i t r i o o n li n e d o G i t u s a. E l e s s o r e p o s i t ri o s G i t s i m p l e s, i g u a i s a o s e u d i r e t r i o . g i t , e x c e t o q u e e l e s t e m n o m e s c o m o p r o j . g i t , e n o t e m n e n h u m d i r e t ri o d e tr a b a l h o a s s o c i a d o a e l e s . A m a i o r i a d o s c o m a n d o s d o G i t e s p e r a m q u e o index d o G i t e s t e j a n o . g i t , e f a l h a r o n o s r e p o s i t ri o s c r u s. C o r r ij a i s t o c o n f i g u r a n d o a v a r i v e l d e a m b i e n t e G I T _ D I R c o m o c a m i n h o d o s e u r e p o s i t r i o c r u, o u e x e c u t a n d o o G i t a p a r ti r d e s t e d i r e t r i o c o m a o p o --b a r e .

Origem do Git
E s t a m e n s a g e m n a li s t a d e d i s c u o d o L i n u x K e r n e l 2 8 d e s c r e v e a s e q u n c i a d e e v e n t o s q u e l e v a r a m a o G i t. A d i s c u s s o i n t e i r a u m s i ti o a r q u e o l g i c o f a s c i n a n t e p a r a h i s t o r i a d o r e s d o G i t.

28 htt p://lk ml. o r g/lk m l/200 5/4/6/12 1

Magia Gi t

39

Ata lhos Do Git


H a l g u m a s q u e s t e s s o b r e o G i t q u e j o g u e i p r a d e b a i x o d o t a p e t e. A l g u m a s s o f a c il m e n t e t r a t a d a s c o m script e g a m b i a r r a s , a l g u m a s r e q u e r e m u m a r e o r g a n i z a o o u r e d e f i n i o d o p r o j e t o, e p a r a a s p o u c a s c h a t e a e s r e m a n e s c e n t e s , s r e s t a e s p e r a p o r u m a s o l u o . O u m e l h o r a i n d a, s o l u c i o n e-a s e a j u d e a t o d o s! E s tiv e b ri n c a n d o c o m al g u m a s id ei a s p a r a si st e m a s d e c o nt r ol e d e v e r s e s, e e s c r e vi u m s i s t e m a e x p e r i m e n t a l b a s e a d o n o G i t 29, q u e a b o r d a a l g u m a s d e s s e s q u e s t e s .

Microsoft Windows
O G i t n o Microsoft Windows p o d e s e r tr a b a l h o s o : C y g w i n 3 0 , u m a m b i e n t e q u e d e i x a o Windows p a r e c i d o c o m o Linux, t e m u m a v e r s o d o G it p a r a W i n d o w s 31. G i t n o M S y s 3 2 u m a l t e r n a ti v a q u e r e q u e r s u p o r t e m i n i m o p a r a e x e c u o , e m b o r a a l g u n s p o u c o s c o m a n d o s p r e c i s e m s e r m a i s tr a b a l h a d o s .

Arquivos Independente s
S e s e u pr ojeto m uito gr a n d e e te m m uito s ar q uiv o s ind e p e n d e nt e s q u e e st o s e n d o c o n s t a n t e m e n t e m o d i fi c a d o s , o G i t p o d e s e r p r e j u d i c a d o m a i s d o q u e o u t r o s s i s t e m a s , p o i s o s a r q u i v o s n o s o m o n i t o r a d o s i s o l a d a m e n t e. O G i t m o n i t o r a m o d i fi c a e s n o p r o j e t o c o m o u m t o d o, o q u e g e r a l m e n t e b e n f i c o. U m a s ol u o di vi dir s e u p r oj et o e m p e d a o s, c a d a u m c o m p o s t o d e a r q ui v o s r e l a c i o n a d o s . U s e g i t s ubmodu l e s e a i n d a q u i s e r m a n t e r t u d o n u m r e p o s i t ri o s .

Quem Est Editando O Que?


A l g u n s s i s t e m a s d e c o n t r o l e d e v e r s e s ir o f o r a-l o a e x p li c it a m e n t e m a r c a r u m a r q u i v o d e a l g u m a m a n e i r a a n t e s d e e d i t a-l o. E m b o r a s e j a e s p e c i a l m e n t e irrit a n t e q u a n d o i s s o e n v o l v e u s a r u m s e r v i d o r c e n t r a li z a d o , i s t o t e m d o i s b e n e f c i o s: 1 . Diff s o r p i d o p o i s a p e n a s o s a r q u i v o s m a r c a d o s s o e x a m i n a d o s ; 2. O u t r o s p o d e m s a b e r q u e m e s t tr a b a l h a n d o n o a r q u i v o p e r g u n t a n d o a o s e r v i d o r c e n t r a l q u e m m a r c o u o a r q u i v o p a r a e d i o. C o m o script c e r t o, v o c p o d e f a z e r o m e s m o c o m o G i t. I s t o r e q u e r a p e n a s a c o o p e r a o d o s p r o g r a m a d o r e s , q u e d e v e m e x e c u t a r o script e m p a r ti c u l a r q u a n d o
29 30 31 32 htt p://ww w- cs- st u d e n t s . s t a n f o r d . e d u/~ bl y n n/ g g/ htt p://cyg w i n . c o m/ htt p://cyg w i n . c o m/ p a c k a g e s/ g i t/ htt p://co d e . g o o g l e . c o m/ p/ m s y s g i t/

40 e s t i v e r e d i t a n d o u m a r q u i v o.

Ata lho s Do Git

Arquivo do Histrico
A s s i m q u e o G i t a r m a z e n a m o d i fi c a e s m u i t o a m p l a s n o p r o j e t o, r e c o n s t r u i r o h i s t ri c o d e u m n i c o a r q u i v o r e q u e r m a i s tr a b a l h o d o q u e e m s i s t e m a s d e a r q u i v o s d e m o n i t o r a m a r q u i v o s i n d i v i d u a l m e n t e. A p e n a l i d a d e u s u a l m e n t e r p i d a, e v a l e a p e n a d e v i d o a e f i c i n c i a q u e d s o u t r a s o p e r a e s . P o r e x e m p l o, g i t c h e c k o u t t o r p i d o q u a n t o c p - a , e o s d e l t a s q u e a b r a n g e m g r a n d e s p a rt e s d o p r oj et o t e m u m a c o m p r e s s o m e l h o r d o q u e o s d elt a s d e a g r u p a m e n t o s d e a r q ui v o s.

Clone Inicial
A c ri a o d e u m c l o n e m a i s tr a b a l h o s o d o q u e f a z e r checkout e m o u t r o s s i s t e m a s d e c o n t r o l e d e v e r s e s q u a n d o h u m h i s t ri c o g r a n d e . O c u s t o ini ci al s e p a g a a lo n g o p r a z o, p o i s a s f ut u r a s o p e r a e s s e r o m a i s r pi d a s e o f fli n e. E n t r e t a n t o, e m a l g u m a s s i t u a e s , p r e f e r v e l c r i a r u m c l o n e o c o c o m a o p o - - d e p t h . I s t o m u i t o m a i s r p i d o, p o r m r e s u l t a e m u m c l o n e c o m f u n c i o n a li d a d e s r e d u zi d a s.

Projetos Volteis
O G i t f o i f eit o p a r a s e r r p i d o n o q u e d i z r e s p e i t o a o t a m a n h o d a s m u d a n a s . H u m a n o s f a z e m p o u c a s e d i e s d e v e r s o p r a v e r s o . a c o r r e o d e u m a f a l h a n u m a li n h a, u m a n o v a c a r a c t e r s ti c a d o s i s t e m a , i n c l u s o d e c o m e n t r i o e a s s i m p o r d i a n t e. M a s s e s e u s a r q u i v o s d i f e r e m m u i t o d e u m a v e r s o p a r a o u t r a, e m c a d a commit, s e u h i s t r i c o ir c r e s c e r a c o m p a n h a n d o o t a m a n h o d o s e u p r o j e t o t o d o. N o h n a d a q u e q u a l q u e r s i s t e m a d e c o n t r o l e d e v e r s e s p o s s a f a z e r p r a a j u d a r, m a s o s u s u r i o s p a d r e s d o G i t d e v e m s o f r e r m a i s q u a n d o e s ti v e r e m c l o n a n d o h i s t r i c o s . A s r a z e s p e l a s q u a i s a s m u d a n a s s o t o g r a n d e s , d e v e m s e r a n a li s a d a s . T a l v e z o s f o r m a t o s d o s a r q u i v o s p o s s a s e r tr o c a d o . E d i e s m e n o r e s s d e v e m c a u s a r p e q u e n a s m o d i f i c a e s e m p o u c o s a r q u i v o s. O u t a l v e z u m b a n c o d e d a d o s o u u m a s o l u o d e backup/ar q u i v a m e n t o s e j a o q u e v o c r e a l m e n t e p r e c i s a, e n o u m s i s t e m a d e c o n t r o l e d e v e r s e s . P o r e x e m p l o, u m c o n t r o l e d e v e r s e s p o d e s e r a d e q u a d o p a r a g e r e n c i a r f o t o s f e it a s p e r i o d i c a m e n t e d e u m a webcam. S e o s a r q u i v o s e s t o, r e a l m e n t e, m u d a n d o c o n s t a n t e m e n t e e p r e c i s a m s e r v e r s i o n a d o s , u m a p o s s i b ili d a d e u s a r o G i t d e u m a m a n e i r a c e n t r a li z a d a. P o d e-s e c ri a r c l o n e s o c o s , q u e a d i c i o n a p o u c o o u q u a s e n a d a a o h i s t ri c o d o p r o j e t o. c l a r o, q u e m u i t a s f e r r a m e n t a s d o G i t s e tr o n a r a m i n a d e q u a d a s , c o r r e e s d e v e m s e r e n v i a d a s c o m o

Magia Gi t

41

patch. I s t o d e v e s e r r a z o a v e l m e n t e t il, p a r a a l g u m q u e d e s e j a m a n t e r u m h i s t ri c o d e a r q u i v o s d e m a s i a d a m e n t e i n s t v e i s. O u t r o e x e m p l o u m p r o j e t o d e p e n d e n t e d e firmware, o q u a l p r o v a v e l m e n t e e s t a r e m g r a n d e a r q u i v o b i n r i o. O h i s t r i c o d e a r q u i v o s d e firmware ir r e l e v a n t e p a r a o s u s u r i o s , e a s a t u a li z a e s t m u m a p s s i m a c o m p r e s s o , a s s i m r e v i s e s d e firmware e s t o u r a r o o t a m a n h o d o r e p o s i t ri o s e m n e c e s s i d a d e . N e s t e c a s o , o c d i g o f o n t e d e v e s e r a r m a z e n a d o n u m r e p o s i t ri o G i t, e o s a r q u i v o s b i n r i o s m a n t i d o s s e p a r a d o s d o m e s m o . P a r a f a c ilit a r o tr a b a l h o, a l g u m c r i a e d i s t ri b u i u m script q u e u s a o G i t p a r a c l o n a r o c d i g o e o rsync o u u m c l o n e o c o d o G i t p a r a o firmware.

Contador Global
A l g u n s s i s t e m a s c e n t r a li z a d o s d e c o n t r o l e d e v e r s e s m a n t m u m n m e r o i n t e i r o p o s i ti v o q u e i n c r e m e n t a d o q u a n d o u m n o v o commit a c e i t o. O G i t r e f e r e n c i a a s m o d i f i c a e s p o r s e u s hash, o q u e o m e l h o r n a m a i o r i a c i r c u n s t n c i a s. M a s a l g u m a s p e s s o a s g o s t a ri a m d e t e r e s t e n m e r o p o r p e r t o. F e li z m e n t e, f c il c r i a r u m script q u e f a a i s s o a c a d a a t u a li z a o, o r e p o s i t ri o c e n t r a l d o G i t i n c r e m e n t a o n m e r o , o u t a l v e z u m a m a r c a, e a s s o c i a a m e s m a c o m o hash d o l ti m o commit. C a d a c l o n e p o d e r i a g e r e n c i a r e s t e c o n t a d o r, p o r m i s t o p r o v a v e l m e n t e s e j a d e s n e c e s s r i o, j q u e a p e n a s o c o n t a d o r d o r e p o s i t ri o c e n t r a l q u e i m p o r t a r p a r a t o d o s.

Subdiretrios Vazios
S u b d i r e t ri o s v a z i o s n o s o m o n i t o r a d o s . C r i e a r q u i v o s v a z i o s p a r a r e s o l v e r e s s e pr o b l e m a. A a t u a l i m p l e m e n t a o d o G i t, e n o s e u o design, a r a z o d e s t e i n c o n v e n i e n t e. C o m s o r t e, u m a v e z q u e o G i t g a n h e m a i s tr a o , m a i s u s u r i o s d e v e m c l a m a r p o r e s s e r e c u r s o e el e p o d e r s e r i m pl e m e n t a d o.

Commit Inicial
U m c i e n t i s t a d a c o m p u t a o ti pi c o i ni c i a u m a c o n t a g e m d o 0, a o i n v s d o 1 . E n t r e t a n t o, n o q u e d i z r e s p e i t o a commit, o G i t n o s e g u e e s t a c o n v e n o . M u i t o c o m a n d o s s o c o n f u s o s a n t e s d o commit i ni c i a l. A l m d i s s o e x i s t e m a l g u m a s a r e s t a s q u e p r e c i s a m a p a r a d a s m a n u a l m e n t e, s e j a c o m u m rebase d e u m branch c o m u m commit i n i c i a l d i f e r e n t e. H b e n e f c i o s a o G i t p o r d e f i n i r o commit z e r o: a s s i m q u e u m r e p o s i t ri o c o n s t r u d o , o H EAD s e r d e f i n i d o p a r a u m a s e q u n c i a c o n s tit u d a d e 2 0 bytes z e r o. E s t e commit e s p e c i a l r e p r e s e n t a u m tree v a z i o, s e m p r e d e c e s s o r, n u m m o m e n t o a n t e ri o r a t o d o s o s

42 r e p o s i t ri o s G i t.

Ata lho s Do Git

S e e m s e g u i d a f o r e x e c u t a d o p o r e x e m p l o, o g i t l o g , s e r i n f o r m a d o a o u s u r i o q u e a i n d a n o f o i r e a li z a d o n e n h u m commit, a o i n v s d e t e r m i n a r d e v i d o u m e r r o f a t a l. S i m i l a r a o u tr a s f err a m e n t a s. T o d o s commit i ni c i a l i m p li c it a m e n t e u m d e s c e n d e n t e d e s t e commit z e r o. P o r e x e m p l o, f a z e n d o u m rebase n u m branch n o m o n i t o r a d o p o d e o c a s i o n a r u m e n x e r t o d e t o d o o branch n o d e s ti n o. A t u a l m e n t e, t o d o s , i n c l u s i v e o commit i ni c i a l, s e r o e n x e r t a d o s , r e s u l t a n d o n u m c o n flit o d e merge. U m a s o l u o u s a r g i t c h e c k o u t s e g u i d o d e g i t c o m m i t - C n o commit i ni c i a l, e u m rebase n o r e s t a n t e. I n f e li z m e n t e h c a s o s p i o r e s . S e v r i o s branch c o m d i f e r e n t e s commit i ni c i a i s f o r e m m e s c l a d o s (merge), e n t o u m rebase d o r e s u l t a d o v a i r e q u e r u m a s u b s t a n c i a l i n t e r v e n o m a n u a l.

You might also like