summaryrefslogtreecommitdiff
path: root/2.md
diff options
context:
space:
mode:
Diffstat (limited to '2.md')
-rw-r--r--2.md144
1 files changed, 143 insertions, 1 deletions
diff --git a/2.md b/2.md
index fbf1b89..f1c5061 100644
--- a/2.md
+++ b/2.md
@@ -421,4 +421,146 @@ Bietan `--patch` erabili daiteke zatika egiteko.
-## Merge aurreratuak — I
+## Merge aurreratuak, konfliktoen kudeaketa — I
+
+Mergeak egin baino lehen, ideia ona da *working directory*a garbitzea (`git
+stash`), horrela, zeozer txarto badabil atzera buelta eman daiteke aldaketak
+galdu barik.
+
+- `git merge --abort` mergea txarto doanean (konfliktoak) mergea ezeztatzen
+ du.
+
+ > KONTUZ: aldaketak badaude *working directory*-an ezin izango da abortatu.
+
+
+## Merge aurreratuak, konfliktoen kudeaketa — II
+
+Konfliktoetan Gitek 3 fitxategi ematen ditu:
+
+1. Stage 1: *common ancestor*-a (*base*), bi adarretatik iritsi daitekeen
+ lehengo commita
+2. Stage 2: Gure (*ours*) bertsioa, gure adarrean dagoena
+3. Stage 3: Haien (*theirs*) bertsioa, mergeatzen dugun adarrean dagoena
+
+- `git show :<stageN>:<file>` stage fitxategiak ikusteko
+ - `:<stageN>:<file>`-k blob horren hasha lortzen du.
+
+- `git diff`-en bitartez ikusi daitezke, stage-a aukeratuz
+ - `git diff -1|--base`
+ - `git diff -2|--ours`
+ - `git diff -3|--theirs`
+
+## Merge aurreratuak, konfliktoen kudeaketa — III
+
+- `git show :<stageN>:<file>` eginez, stage bakoitzaren fitxategiak fitxategi
+ ezberdinetara idatzi daitezke eskuz prozesatzeko
+
+- `git merge-file` erabili daiteke hiru fitxategiak eskuz mergeatzeko. Merge
+ algoritmoak aplikatuko ditu
+
+## Merge aurreratuak, konfliktoen kudeaketa — IV
+
+Konfliktoak hobeto aztertzeko tresna batzuk:
+
+- `git checkout --conflict` konfliktoa daukan fitxategiaren konflikto
+ markadoreak berriro idazten ditu. Eskuz aldatzean nahi gabe ezabatu
+ ditugunean interesgarria da.
+
+- `git checkout --ours/--theirs` egin daiteke alde bat edo bestea ikusteko.
+
+- `git log --oneline --left-right --merge` interesgarria da testuingurua
+ ulertzeko.
+
+- `git diff` egitean konfliktoetan *combined diff* bat agertzen da, bi
+ zutabeetan ikusten dira aldaketak.
+
+- `git show -p|--patch` egitean `--cc` gehitu daiteke *combined diff*a ikusteko
+
+
+## Merge aurreratuak, konfliktoen kudeaketa — V
+
+*Combined diff*-aren itxura, konflikto bat konpontzean:
+
+```
+diff --cc hello.rb
+index 0399cd5,59727f0..0000000
+--- a/hello.rb
++++ b/hello.rb
+@@@ -1,7 -1,7 +1,7 @@@
+ #! /usr/bin/env ruby
+
+ def hello
+- puts 'hola world'
+ - puts 'hello mundo'
+++ puts 'hola mundo'
+ end
+```
+
+Bi zutabe daude `-` eta `+` sinboloekin, alde bakoitzean zer gertatu den
+ikusteko.
+
+## Merge aurreratuak, konfliktoen kudeaketa — VI
+
+Konfliktoetan `diff3` erabiltzea interesgarria izan daiteke, defektuz `merge`
+erabiltzen da. Atal berri bat gehitzen dio konfliktoari, *base*a bistaratzeko.
+```
+<<<<<<< ours
+ puts 'hola world'
+||||||| base
+ puts 'hello world'
+=======
+ puts 'hello mundo'
+>>>>>>> theirs
+```
+
+- `git checkout --conflict=diff3` konfliktoa 3 stagetan bistaratzeko.
+
+- `git config --global merge.conflictstyle diff3` konfliktoak 3 bidetan
+ ikusteko
+
+
+## Mergeak desegiten — I
+
+1. `git reset --hard HEAD~` (historikoa berridazten du)
+2. `git revert -m 1 HEAD` commit bat gehitu aldaketak desegiten dituena.
+ Arazoak datoz adarra berriro mergeatu behar denean.
+
+## Mergeak desegiten — II
+
+`git revert -m 1 HEAD` egitean, mergea desegin da beste commit batekin. `^M`
+eta `C6` eduki berdinak dituzte. Baina `topic` adarraren commitak `master`etik
+iritsi daitezke. Gitentzat mergeatuta daudela dirudi. KONTUZ
+
+![](img/undomerge-revert.png)
+
+## Mergeak desegiten — III
+
+Txarragoa izan daitekeena, aldaketak gehitzen badira, Gitek commit berriak
+baino ez ditu hartzen, bestea mergeatuta dagoela uste duelako. KONTUZ
+
+![](img/undomerge-revert2.png)
+
+## Mergeak desegiten — IV
+
+Arazoa saihesteko, aurreko mergea, desegin duguna, aplikatu behar da.
+Horretarako, `revert` commita desegin daiteke beste `revert` bat eginez.
+
+![](img/undomerge-revert3.png)
+
+Orain, `topic`-en aldaketa guztiak `master`-en daude.
+
+## Mergeen preferentziak
+
+`git merge` aukera eta estrategia ezberdinak daude:
+
+- `-X` aukerak gehitzeko erabiltzen da. Adibidez: `-Xours` konfliktoak gure
+ aldera ebazteko
+
+- `-s` estrategiak gehitzeko. Adibidez: `-s ours` mergea egin beharrean, gure
+ aldeko aldaketak bakarrik aukeratu (Giti ziria sartzeko interesgarria da)
+
+Aukerak eta estrategiak ez dira gauza bera. Estrategiak merge algoritmoa
+definitzen dute. Aukerek algoritmoa konfiguratzen dute.
+
+## Subtree-ak
+