Semplice strumento per "accettare la loro" o "accetta la mia" su un intero file usando git



Answers

In base alla risposta di Jakub è possibile configurare i seguenti alias git per comodità:

accept-ours = "!f() { git checkout --ours -- \"${@:-.}\"; git add -u \"${@:-.}\"; }; f"
accept-theirs = "!f() { git checkout --theirs -- \"${@:-.}\"; git add -u \"${@:-.}\"; }; f"

Opzionalmente accettano uno o più percorsi di file da risolvere e di default risolvono tutto sotto la directory corrente se non ne viene dato nessuno.

Aggiungili alla sezione [alias] di ~/.gitconfig o esegui

git config --global alias.accept-ours '!f() { git checkout --ours -- "${@:-.}"; git add -u "${@:-.}"; }; f'
git config --global alias.accept-theirs '!f() { git checkout --theirs -- "${@:-.}"; git add -u "${@:-.}"; }; f'
Question

Non voglio uno strumento di unione visiva, e inoltre non voglio dover vi il file in conflitto e scegliere manualmente tra HEAD (il mio) e il cambiamento importato (il loro). La maggior parte delle volte voglio o tutti i loro cambiamenti o tutti i miei. Di solito questo è dovuto al fatto che il mio cambiamento lo ha fatto salire e mi sta tornando attraverso un tiro, ma può essere leggermente modificato in vari punti.

Esiste uno strumento a riga di comando che eliminerà i marcatori di conflitto e sceglierà in un modo o nell'altro in base alla mia scelta? O una serie di comandi git che posso nominare personalmente ciascuno di loro.

# accept mine
alias am="some_sequence;of;commands"
alias at="some_other_sequence;of;commands"

Fare questo è piuttosto fastidioso. Per "accetta il mio" ho provato:

randy@sabotage ~/linus $ git merge test-branch
Auto-merging Makefile
CONFLICT (content): Merge conflict in Makefile
Automatic merge failed; fix conflicts and then commit the result.

randy@sabotage ~/linus $ git checkout Makefile 
error: path 'Makefile' is unmerged

andy@sabotage ~/linus $ git reset --hard HEAD Makefile 
fatal: Cannot do hard reset with paths.

Come dovrei sbarazzarmi di questi indicatori di cambiamento?

Posso fare:

git reset HEAD Makefile; rm Makefile; git checkout Makefile

Ma questo sembra piuttosto rotondo, ci deve essere un modo migliore. E a questo punto, non sono sicuro se git pensi che sia avvenuta l'unione, quindi non penso che funzioni necessariamente.

Andando dall'altra parte, fare "accettare la loro" è ugualmente disordinato. L'unico modo in cui riesco a capire è fare:

git show test-branch:Makefile > Makefile; git add Makefile;

Questo mi dà anche un messaggio di commit incasinato, che ha Conflicts: Makefile in esso due volte.

Qualcuno può per favore indicare come fare le due azioni sopra in un modo più semplice? Grazie




In base alla risposta di kynan, ecco gli stessi alias, modificati in modo da poter gestire spazi e trattini iniziali nei nomi dei file:

accept-ours = "!f() { [ -z \"$@\" ] && set - '.'; git checkout --ours -- \"$@\"; git add -u -- \"$@\"; }; f"
accept-theirs = "!f() { [ -z \"$@\" ] && set - '.'; git checkout --theirs -- \"$@\"; git add -u -- \"$@\"; }; f"



Links