Szukaj…


Proste aliasy

Istnieją dwa sposoby tworzenia aliasów w Git:

  • z plikiem ~/.gitconfig :
[alias]
    ci = commit
    st = status
    co = checkout
  • z linii poleceń:
 git config --global alias.ci "commit"
 git config --global alias.st "status"
 git config --global alias.co "checkout"

Po utworzeniu aliasu wpisz:

  • git ci zamiast git commit ,
  • git st zamiast git status ,
  • git co zamiast git checkout .

Podobnie jak w przypadku zwykłych poleceń git, oprócz argumentów można używać aliasów. Na przykład:

 git ci -m "Commit message..."
 git co -b feature-42

Wyświetl / wyszukaj istniejące aliasy

Możesz wyświetlić listę istniejących aliasów git za pomocą --get-regexp :

$ git config --get-regexp '^alias\.'

Wyszukiwanie aliasów

Aby wyszukać aliasy , dodaj następujące polecenie do .gitconfig obszarze [alias] :

aliases = !git config --list | grep ^alias\\. | cut -c 7- | grep -Ei --color \"$1\" "#"

Następnie możesz:

  • git aliases - pokaż WSZYSTKIE aliasy
  • git aliases commit - tylko aliasy zawierające „commit”

Zaawansowane aliasy

Git pozwala używać poleceń innych niż git i składni pełnej powłoki sh w aliasach, jeśli je poprzedzisz ! .

W twoim pliku ~/.gitconfig :

[alias]
    temp = !git add -A && git commit -m "Temp"

Fakt, że pełna składnia powłoki jest dostępna w tych prefiksowanych aliasach, oznacza również, że możesz używać funkcji powłoki do konstruowania bardziej złożonych aliasów, takich jak te, które wykorzystują argumenty wiersza poleceń:

[alias]
    ignore = "!f() { echo $1 >> .gitignore; }; f"

Powyższy alias definiuje funkcję f , a następnie uruchamia ją z dowolnymi argumentami przekazanymi do aliasu. Więc uruchomienie git ignore .tmp/ doda .tmp/ do twojego pliku .gitignore .

W rzeczywistości ten wzorzec jest tak przydatny, że Git definiuje dla ciebie zmienne $1 $2 itp., Więc nie musisz nawet definiować dla niego specjalnej funkcji. (Pamiętaj jednak, że Git i tak dołączy argumenty, nawet jeśli uzyskujesz do nich dostęp za pomocą tych zmiennych, więc możesz na końcu dodać fałszywe polecenie).

Uwaga: aliasy z prefiksem ! w ten sposób są uruchamiane z katalogu głównego kasy git, nawet jeśli bieżący katalog znajduje się głębiej w drzewie. Może to być przydatny sposób na uruchomienie polecenia z katalogu głównego bez konieczności jawnego cd nim cd .

[alias]
    ignore = "! echo $1 >> .gitignore"

Tymczasowo zignoruj śledzone pliki

Aby tymczasowo oznaczyć plik jako ignorowany (przekaż plik jako parametr do aliasu) - wpisz:

unwatch = update-index --assume-unchanged

Aby ponownie rozpocząć śledzenie pliku - wpisz:

watch = update-index --no-assume-unchanged

Aby wyświetlić listę wszystkich plików, które zostały tymczasowo zignorowane - wpisz:

unwatched = "!git ls-files -v | grep '^[[:lower:]]'"

Aby wyczyścić nieprzypisaną listę - wpisz:

watchall = "!git unwatched | xargs -L 1 -I % sh -c 'git watch `echo % | cut -c 2-`'"

Przykład użycia aliasów:

git unwatch my_file.txt
git watch my_file.txt
git unwatched
git watchall

Pokaż ładny dziennik z wykresem gałęzi

[alias]
  logp=log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short

  lg =  log --graph --date-order --first-parent \
     --pretty=format:'%C(auto)%h%Creset %C(auto)%d%Creset %s %C(green)(%ad) %C(bold cyan)<%an>%Creset'
  lgb = log --graph --date-order --branches --first-parent \                      
     --pretty=format:'%C(auto)%h%Creset %C(auto)%d%Creset %s %C(green)(%ad) %C(bold cyan)<%an>%Creset'
 lga = log --graph --date-order --all \                                          
   --pretty=format:'%C(auto)%h%Creset %C(auto)%d%Creset %s %C(green)(%ad) %C(bold cyan)<%an>%Creset'

Oto objaśnienie opcji i symboli zastępczych używanych w formacie --pretty (wyczerpująca lista jest dostępna z git help log )

--graph - narysuj drzewo zmian

- order-order - użyj kolejności znaczników czasu zatwierdzenia, jeśli to możliwe

--first-parent - śledź tylko pierwszego rodzica w węźle scalania.

- oddziały - pokaż wszystkie oddziały lokalne (domyślnie pokazywana jest tylko bieżąca gałąź)

--all - pokaż wszystkie oddziały lokalne i zdalne

% h - wartość skrótu dla zatwierdzenia (w skrócie)

% ad - Datownik (autor)

% an - nazwa użytkownika autora

% an - Zatwierdź nazwę użytkownika

% C (auto) - aby użyć kolorów zdefiniowanych w sekcji [kolor]

% Creset - aby zresetować kolor

% d - --dekorować (nazwy gałęzi i tagów)

% s - komunikat zatwierdzenia

% ad - data autora (będzie zgodna z dyrektywą - data) (a nie data commiter)

% an - nazwa autora (może być% cn dla nazwy osoby odpowiedzialnej)

Aktualizacja kodu przy zachowaniu historii liniowej

Czasami musisz zachować liniową (nierozgałęzioną) historię swoich zatwierdzeń kodu. Jeśli pracujesz nad gałęzią przez jakiś czas, może to być trudne, jeśli musisz wykonywać regularne git pull ponieważ spowoduje to zarejestrowanie połączenia z wcześniejszym etapem.

[alias]
  up = pull --rebase

Spowoduje to zaktualizowanie źródła źródłowego, a następnie ponowne zastosowanie każdej pracy, której nie zepchnąłeś na to, co ściągnąłeś.

Używać:

git up

Zobacz, które pliki są ignorowane przez Twoją konfigurację .gitignore

[ alias ]

    ignored = ! git ls-files --others --ignored --exclude-standard --directory \
            && git ls-files --others -i --exclude-standard

Pokazuje jeden wiersz na plik, więc możesz grep (tylko katalogi):

$ git ignored | grep '/$'
.yardoc/
doc/

Lub policz:

~$ git ignored | wc -l
199811                 # oops, my home directory is getting crowded

Pliki sceniczne bez scen

Zwykle, aby usunąć pliki, które zostały zatwierdzone za pomocą polecenia git reset , reset ma wiele funkcji w zależności od podanych argumentów. Aby całkowicie zrestartować wszystkie ustawione pliki, możemy skorzystać z aliasów git, aby utworzyć nowy alias, który używa reset ale teraz nie musimy pamiętać o podaniu poprawnych argumentów do reset .

git config --global alias.unstage "reset --"

Teraz, za każdym razem, gdy chcesz rozpakować pliki etapów, wpisz git unstage i możesz zacząć.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow