Git: nu se poate face o confirmare parțială în timpul unei fuziuni (SourceTree) (Programare, Git, Controlul Versiunilor, Git Merge, Atlassian Sourcetree)

Jan Drozen a intrebat.
a intrebat.

După ce am actualizat SourceTree la cea mai recentă versiune, mă lupt cu această problemă. Să presupunem următorul scenariu:

Există un fișier A, B și C sub controlul versiunii și există doar o singură ramură. În copia mea de lucru, fac câteva modificări în fișierul A astfel încât acesta se transformă în A’ precum și fișierul B la B’. Altcineva, în copia sa de lucru, face o modificare în fișierul C -> C’.

Eu pun în scenă și îmi comit modificările aduse fișierului B numai. Astfel, am o nouă revizuire: A, B’, C și copia de lucru A’, B’, C.

Celălalt își comite modificările, deci face o revizuire A, B, C’ și o împinge la origine.

Și iată că apare. Atunci când efectuez pull-ul, primesc câteva modificări de fuziune (se afișează C’). Și vreau să trimit o revizuire constând în A, B’, C’. Nu vreau să fac acum nimic cu fișierul modificat A. Cu toate acestea, GIT, SourceTree, respectiv SourceTree, eșuează cu:

fatal: nu se poate face o confirmare parțială în timpul unei fuziuni.

Până când nu pun în scenă sau nu renunț la modificările aduse fișierului A.

Sunt destul de sigur că o versiune anterioară a SourceTree nu a expus acest comportament.

Actualizare 2017/05

Se pare că în cea mai recentă versiune SourceTree 2.0.20.1 această problemă a fost rezolvată. Cu toate acestea, asigurați-vă că doriți să actualizați la această versiune, deoarece conține o mulțime de „bug-uri” (caracteristici noi) care nu-mi plac deloc.

2 răspunsuri
Arvin

fatal: nu se poate face o confirmare parțială în timpul unei fuziuni.

Acest lucru indică faptul că fuziunea dvs. este încă în curs de desfășurare, ar putea exista unele conflicte pe care încă trebuie să le rezolvați.

Vă rugăm să selectați Conflicte din căsuța derulantă ca în captura de ecran și ar trebui să puteți vedea o listă de fișiere aflate în conflict cu o pictogramă triunghiulară. Rezolvarea acestora și apoi efectuarea unei confirmări ar trebui să rezolve problema dvs.

Această postare ar trebui să ofere o scurtă idee despre cum să configurați și să utilizați un instrument extern pentru a rezolva conflictele de fuziune – Cum să rezolvați interactiv (vizual) conflictele în SourceTree / git

Dacă tot nu reușiți să vă împăcați, puteți să vă ascundeți modificările. Trageți de la origine și aplicați stash pentru a remedia același lucru.

Modificări

Puteți, de asemenea, să automatizați toate aceste operațiuni folosind „custom action”. Un exemplu de script pentru a face un stash >> pull >> apply stash este copiat mai jos

git -c diff.mnemonicprefix=false -c core.quotepath=false stash save temp
git -c diff.mnemonicprefix=false -c core.quotepath=false fetch origin
git -c diff.mnemonicprefix=false -c core.quotepath=false pull origin <<local path goes here>>
git -c diff.mnemonicprefix=false -c core.quotepath=false submodule update --init --recursive
git -c diff.mnemonicprefix=false -c core.quotepath=false stash apply [email protected]{0}

Comentarii

  • Vă mulțumim pentru răspuns. În cazul din întrebarea inițială nu există niciun conflict, deoarece fișierul A nu este modificat și nu este confirmat. Știu că pot face un stash, dar nu vreau să fac acest lucru de fiecare dată când efectuez o fuziune. Mai ales când acest lucru a funcționat bine în versiunile anterioare. –  > Por Jan Drozen.
  • Puteți, de asemenea, să automatizați toate aceste operațiuni utilizând „acțiune personalizată”, vă rugăm să consultați edițiile –  > Por Arvin.
javaPlease42

Următorul răspuns la această întrebare a funcționat pentru mine.

„Puteți șterge manual .git/MERGE_HEAD și Git nu va putea spune că tocmai ați făcut o fuziune. Vă va permite să modificați confirmarea anterioară cu modificările din indexul dvs. la fel ca în mod normal.”