diff options
author | Ekaitz Zarraga <ekaitz@elenq.tech> | 2022-05-31 16:14:57 +0200 |
---|---|---|
committer | Ekaitz Zarraga <ekaitz@elenq.tech> | 2022-05-31 16:14:57 +0200 |
commit | 82c9d56ea98581e52f021f9ddb042c3e95fd2c00 (patch) | |
tree | b5027189dda9bd59fc45f0b1bc7876690a216de4 /2.md | |
parent | 79bae5eaaaea37e88861a6b602b1d181ddc8f13f (diff) |
konfliktoen kudeaketa
Diffstat (limited to '2.md')
-rw-r--r-- | 2.md | 144 |
1 files changed, 143 insertions, 1 deletions
@@ -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 + |