Tło

Zwykle trzymam się Git CLI dla wszystkich moich operacji Git. Jedyny czas, którego używam narzędzia GIT GUI, jest kiedy chcę zobaczyć lokalizację git zobowiązać się do drzewa.

W tej chwili mam tę linię poleceń, która pokazuje mi drzewo Git:

git log --graph --decorate --pretty=oneline --abbrev-commit --all

Który pokazuje mi ładne drzewo ilustracja:

* 6068f4b (origin/develop) exclude arm64 architecture
* d49b4be Fix crash for global mark jump in Xcode12
*   6e32166 Merge branch 'master' into develop
|\
| * 6356710 (HEAD -> master, origin/master, origin/HEAD) README.md
* | b126142 update project
* | 3b050e5 Failing Unit Test is commented out with FIXME comment addition
* | caad84d improve test
* |   0bc3054 Merge branch 'master' into develop
|\ \
| |/
| * a4a4fdb Fix Yank
* |   39d38ce Merge pull request #308 from chml/fix/yankAndPut
|\ \

Problem

Problem polega na tym, że jeśli chcę zobaczyć lokalizację Git Hash w tym drzewie, muszę wykonać następujące czynności:

  • uruchom git checkout <target-hash>
  • uruchom git log --graph --decorate --pretty=oneline --abbrev-commit --all
  • Przewiń ręcznie drzewa Git, aż zobaczę, gdzie HEAD (może to potrwać trochę czasu na Repos Git)
  • Wróć do mojego oryginalnego COMMIT git checkout <original-commit>

Pytanie

Chciałbym polecenie, które sprawiłyby, że wszystkie te kroki w jeden (więc powinienem unikać zmiany mojej git head cangs). W przypadku Git Gui jest to ładna prosta obsługa (zarówno gitkraken, jak i sourceteree oferują to poza pole). Na przykład w SourCetree To jest połączenie , aby zatwierdzić Operacja:

enter image description here

Propozycje?

git
4
abbood 26 październik 2020, 09:07

1 odpowiedź

Najlepsza odpowiedź

Zróbmy to w bash, otwórz {x0}} lub ~/.bash_profile

vim ~/.bashrc

Utwórzmy alias dla polecenia Git, którego używasz na początku, więc nie musisz go wpisywać

alias gitTree="git log --graph --decorate --pretty=oneline --abbrev-commit --all"

Teraz napiszmy funkcję, która pokazuje głowę

function gshow(){
    git checkout "$1" --quiet
    git log --graph --decorate --pretty=oneline --abbrev-commit --all | grep "(HEAD)"
    git checkout - --quiet
}

Zamknij plik i uruchom to z terminala source ~/.bashrc lub source ~/.bash_profile

Teraz nazywasz go z terminalu

gshow <target-hash>

Dodałem polecenie --quiet, więc pokazuje tylko to, co chcesz zobaczyć, a kiedy skończy się, powraca do poprzedniego oddziału.

Aktualizacja

Zaktualizowałem skrypt, aby ustawić go domyślnie, aby pokazać kontekst 10 linii, ale 10 linii można rozbudować w przypadku, gdy użytkownik chce więcej kontekstu:

function gshow(){
    ARG2=${2:-10}
    git checkout "$1" --quiet
    git log --graph --decorate --pretty=oneline --abbrev-commit --all | grep -C $ARG2 "(HEAD)"
    git checkout - --quiet
}

Przykład użycia:

Bez kontekstu arg

$ gshow 0bc3df2
|\ \ \
| * | | dff86b7 Add an FAQ on why users need to resign Xcode to use Xvim2
| | |/
| |/|
* | |   d267b5f Merge pull request #173 from 99arobe/task/update-README-to-remove-dead-link
|\ \ \
| |/ /
|/| |
| * | 64ecb94 Remove contributing guidelines from the README
|/ /
* | 0bc3df2 (HEAD) add comment
* | 2bddec1 add header update command comment
* | e244543 update Xcode10 beta3 header
* |   763b317 Merge branch 'master' into develop
|\ \
| |/
| *   2e50b5a Merge pull request #154 from rick-kilgore/master
| |\
| | * fc3eb9c fudge for the lines that might be only partially shown
| | * 62efd89 move logic into switch for XVIM_SCROLL_TYPE_LINE
| | * c4da83f allow scrolling to the first and last lines.  ensure cursor is in the right place

Z kontekstowym arg.

$ gshow 0bc3df2 20
|\ \ \
| |/ /
| * | ad28881 update branches and release readme
* | | 07d6820 deployment target 10.12 -> 10.13, swift -> 4.0
* | |   b06fbdf Merge pull request #177 from timothycosta/develop
|\ \ \
| * | | 2c48bcf Implemented 'source' command
| * | | 98cf07d Source xvimrc on toggle xvim
|/ / /
* | |   c725592 Merge pull request #175 from 99arobe/task/update-README-to-include-reasons-for-resigning-Xcode
|\ \ \
| * | | dff86b7 Add an FAQ on why users need to resign Xcode to use Xvim2
| | |/
| |/|
* | |   d267b5f Merge pull request #173 from 99arobe/task/update-README-to-remove-dead-link
|\ \ \
| |/ /
|/| |
| * | 64ecb94 Remove contributing guidelines from the README
|/ /
* | 0bc3df2 (HEAD) add comment
* | 2bddec1 add header update command comment
* | e244543 update Xcode10 beta3 header
* |   763b317 Merge branch 'master' into develop
|\ \
| |/
| *   2e50b5a Merge pull request #154 from rick-kilgore/master
| |\
| | * fc3eb9c fudge for the lines that might be only partially shown
| | * 62efd89 move logic into switch for XVIM_SCROLL_TYPE_LINE
| | * c4da83f allow scrolling to the first and last lines.  ensure cursor is in the right place
| | * 17ab836 don't move cursor on ctrl-e, ctrl-y
| |/
* | 7f4943d update the mangled signature of addSelectedRange
* | ac3faea fix #161 Xcode 10: Crash while edit in 'build phases'
* | 7dc4ea9 fix #158 not work C-f,C-b,C-u,C-d in Xcode10
* | 6397eff improve swift source
* | 9415303 add logger for swift
* | dae173f change swift function pointer address for Xcode10
* | d95e598 change from Xcode9.3 header to Xcode10
* | da8b31d class-dump Xcode10
2
abbood 26 październik 2020, 18:47