Git Commands

Published: 2019-08-04, Updated: 2020-04-28

Links

Tipos de bases do git

git checkout refs/
		refs/tags
		refs/remotes
		refs/heads(branches)

Como deletar uma tag no repositório

git push origin :refs/tags/release01

Pegar lista de arquivos do repositório

git ls-tree --full-tree -r HEAD

Lembrar a senha do https

git config --global credential.helper store

Deletar todas as tags

git tag | xargs git tag -d

Mudar tamanho do tab (tabsize)

set ?ts=2 or ?ts=4 on end of url file

Isolar alterações locais

Você alterou um ou mais arquivos e não quer que eles apareçam no status para serem commitados

Salvar alterações para não serem subidas

$ git stash save "configuracoes locais para eclipse"
HEAD is now at d670af6 voltando ao properties original do andrey

Listando os stashs feitos

$ git stash list
stash@{0}: On FKF-31: configuracoes locais para eclipse
$ git status
On branch FKF-31
nothing to commit, working directory clean

Voltando a alteração para o versionamento

$ git stash pop stash@{0}

subir passar apenas um commit para a branch

git branch onecommit
git checkout onecommit
git cherry-pick 7300a6130d9447e18a931e898b64eefedea19544 #### From the other branch
git push origin {branch}

matar tudo que está na branch e pegar do remoto

git fetch --all
git reset --hard origin/master

Git diff

Merge em three-way

Desabilitar backups

git config --global mergetool.keepBackup false

pegar ultima tag criada

TAG=$(git describe --abbrev=0 --tags)

Listar tags por data decrescente

git log --tags --simplify-by-decoration --pretty="format:%ai %d"

Alterar um comentário no histórico

git rebase --interactive -p um-commit-antes-do-desejado
#### depois só ir dando `git rebase --skip`
#### algumas coisas vai ter que fazer merge mas o -p minimiza isso

Remover arquivo do stage

Apenas para tirar da lista para ser comitado

git reset HEAD nomeArquivo

Desfazendo as alteracoes de uma arquivo

git checkout -- filename #### ou
git checkout HEAD^ filename

criar branch vazia

git checkout --orphan <branchname>

senhas HTTPS

Setar tempo da cache da senha

git config --global credential.helper 'cache --timeout=3600' #### uma hora

Onde ficam os passwords salvos do HTTPS

~/.git-credentials

Mudar o autor do commit

Rode o script (tem que ser feito em cada branch)

sh git-author-rewrite.sh 

Se precisar rodar denovo (para outra branch por exemplo) apague a pasta de backup

rm -rf .git/refs/original/

Faça push de cada branch

git push -f

Faça push das tags (só precisa ser feito uma vez, diferente das branchs que devem ser feitas uma cada)

git push --tags -f

Outro script que parece que funcionou melhor

$ git filter-branch -f --env-filter '
    if [ "$GIT_AUTHOR_EMAIL" = "elvisefs@br.ibm.com" ]; then \
        export GIT_AUTHOR_NAME="Elvis de Freitas" GIT_AUTHOR_EMAIL="edigitalb@gmail.com"; \
    fi
    '

enviar todas as branches de um remote para o outro

git push novoRemote refs/remotes/antigoRemote/*:refs/heads/*

Listar remotes

git remote -v

Submodules

adicionando um submodule

git submodule add git@mygithost:billboard lib/billboard

ou mexa no .gitmodules

[submodule "lib/billboard"]
path = lib/billboard
url = git@mygithost:billboard

Clonar um repositório que tem submodules já baixando todos os módules

Cloning repo

$ git clone https://github.com/mageddo/my-project.git
$ cd my-project/

Initializing and download all submodules setup at .gitmodules

$ git submodule init
$ git submodule update # ou git submodule update --init --recursive

Mudar a url de um modulo

Mude no .gitmodules e rode git submodule sync para atualizar as URLs

Fazer pull do repositório root já forçando que os submodules peguem a versão setada no root

git pull
git submodule update

mesmo que o submodule esteja com codigo modificado esse ultimo comando vai fazer checkout no commit setado no projeto root deixando asssim no mesmo estado, mas os arquivos editados ainda ficam alterados aguardando para serem comitados

para saber de dentro do projeto root se os submodules estão com modificacoes sem commit basta rodar git status como no exemplo abaixo:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)
  (commit or discard the untracked or modified content in submodules)

	modified:   my-project-module-1 (modified content, untracked content)

no changes added to commit (use "git add" and/or "git commit -a")

Outros

Exemplo de como configurar git com duas contas no mesmo host

$ cat ~/.ssh/config 
Host github.com
	HostName github.com
	Port 22
	User mageddo
	IdentityFile ~/.ssh/github


Host bitbucket-mageddo
	HostName bitbucket.org
	User git
	IdentityFile ~/.ssh/bitbucket-mageddo

Host bitbucket.org
	HostName bitbucket.org
	User git
	IdentityFile ~/.ssh/bitbucket

Git diff

$ git diff feature master --name-status 
Mostra as diferencas do master para o meu

Pegar as configurações do repositório

$ git config --list

Reescrever arquivos no histórico

$ git filter-branch --tree-filter "find . -name '*.php' -exec sed -i -e \
's/originalpassword/newpassword/g' {} \;"

Para buscar e substituir em qualquer arquivo (ignorando a extensão)

$ git filter-branch -f --tree-filter "find . -type f -exec sed -i -e
's/5172net/mypassword/g' {} ;"

Listar alterações em uma linha específica

git blame -L250,265 fileName

logar com data autor mensagem e commit hash

git log --abbrev-commit --oneline --pretty="%h %ci %an %s\n"  
/repo/xpto/WithdrawBatchServiceImpl.java

Desfazer um commit mantendo o histórico

Descartar mudanças no arquivo

git checkout filename

Deletar todos os commits e criar uma branch sem nenhum commit

$ git checkout --orphan latest_branch
$ git add -A
$ git commit -am "commit message"
$ git branch -D master
$ git branch -m master

Remover arquivos em que nao foi dado git add

remover untracked files

$ git clean -f -n
$ git clean -f

Log das alteracoes que fazem match

git log -p -G '^Minha Regex$' x.java

Recuperar Um arquivo do git

git show HEAD~4:index.html > local_file

Mergiar ignorando o meu

git merge -X theirs origin/master

Mostrar apenas o texto que foi alterado

git diff --word-diff=color

Checar se a tag ainda existe

APP_VERSION=1.0.0
if git rev-parse "$APP_VERSION^{}" >/dev/null 2>&1; then
	echo "> Version already exists $APP_VERSION"
	exit 3
fi

Fazer todos os arquivos usarem \r\n (new line, Windows)

#
# https://help.github.com/articles/dealing-with-line-endings/
#
# These are explicitly windows files and should use crlf
*.bat           text eol=crlf
*               text eol=crlf

Contar commits

git rev-list HEAD --count

Github no modo 2FA

Nesse modo quando voce for fazer push via terminal vai precisar passar o personal token gerado nessa url


Lubuntu Commands Remover todas as propriedades das tags

Comments