일상적인 워크플로우에서 자주 사용하는 Git 명령 및 구성

나는 명령행 애호가로 터미널에서 Git를 사용해 왔다.
만약 네가 나처럼 된다면, 너는 언젠가부터 사소한 일에 화가 나기 시작할 것이다.예를 들어 항상 두 개의 단독 명령 git add <file> 을 입력한 다음 git commit -m 'Your commit message' 을 입력하여 변경 사항을 제출하는 것은 좀 짜증나기 시작한다.또는, git log 를 입력할 때, 더 좋은git 기록을 원할 수도 있습니다.또는 원격 브랜치를 삭제한 후 로컬 브랜치를 자동으로 클립하려고 합니다.이런 사소한 일은 네가 알게 될 것이다.
시간의 추이에 따라 저는 정성스럽게 기획한 명령, 별명과 설정 목록을 세웠습니다. 저는 매일 이런 명령, 별명과 설정을 사용합니다. 이것은 제 업무 절차를 더욱 효율적이고 즐겁게 합니다.저는 아래에서 여러분과 나누고 싶습니다.

로컬 지점 및 원격 추적 지점 나열


이 명령은 최근에 제출한 해시 코드와 제출 메시지를 표시합니다.원격 브랜치가 삭제되었는지 여부도 알려 줍니다.
git branch -vv
예를 들어 내 기계에서 이 명령을 실행하면 다음과 같은 출력이 발생합니다.

원격 분기 체크 아웃


Git 버전 사용≥ 1.6.6 리모컨 하나만 있으면 다음을 수행할 수 있습니다.
git fetch
git checkout <branch_name>
리모컨이 여러 개 있는 경우 git checkout <branch_name> 는 현대 Git에서 작동하지 않습니다.이 경우
git checkout -b <branch_name> <remote_name>/<branch_name>
속기
git checkout -t <remote_name>/<branch_name>

명령에 추가 및 제출


다음 별칭을 글로벌 Git 구성 파일에 추가합니다(Linux/Mac OS 시스템에서는 일반적입니다~/.gitconfig.나는 두 번째를 더 좋아한다. 왜냐하면 그것은 더 많은 키 횟수를 절약할 수 있기 때문이다.
# add a `add-commit` alias, or
git config --global alias.add-commit '!git add -A && git commit'

# add a `ac` alias to save a few more keystrokes
git config --global alias.ac '!git add -A && git commit'
그리고 그것을
git add-commit -m 'My commit message' # or
git ac -m 'My commit message'

로컬 및 원격 삭제 분기


브랜치를 처리한 후 다음 명령을 사용하여 원격 및 로컬 컴퓨터에서 브랜치를 제거할 수 있습니다.
# delete a remote branch
git push -d <remote_name> <branch_name> # or
git push -D <remote_name> <branch_name>

# delete a local branch
git branch -d <branch_name> # or
git branch -D <branch_name>
대부분의 경우 이름은 소스입니다.
참고: -d 옵션은 --delete 의 별칭으로, 브랜치가 상위 브랜치에 완전히 통합된 경우에만 브랜치를 삭제합니다.또한 -D 를 사용할 수 있습니다. 이것은 --delete --force 의 별명으로 분기 irrespective of its merged status 를 삭제하는 데 사용됩니다.

원격에서 병합된 모든 분기 삭제


장기적으로 실행되는 development 분기가 있다고 가정하고 그 분기를 다른 특징 분기(예: feature/A, feature/B를 생성합니다.
동업자가 이 두 기능에 대한 요청을 검토한 후 다시 development 통합하고 원격에서 삭제합니다.로컬 삭제 feature/Afeature/B 를 실행하여
# switch to the development branch first
git checkout development

# delete local branches whose remote tracking branches have been merged back to development
git delete-merged
Git 명령이 아님을 알 수 있습니다 delete-merged. 이것은 실제로 우리가 설정한 별명입니다.실제 명령에 사용되는 매개변수는 설정에 따라 다릅니다.단, 다음 절차에 따라 필요한 명령을 구성할 수 있습니다.
1단계: 분기 보기development.
2단계: 원격에서 병합된 모든 지점을 나열합니다.
git branch --merged
단계 3: 삭제하기 싫은 지점을 볼 수 있습니다. 예를 들어 master, release 등입니다. 이 지점을 제외하면 목록을 선별할 수 있습니다.
git branch --merged | egrep -v "(^\*|master|development|skip_branch_name)"
egrep 명령에 사용되는 정규 표현식은 기본적으로 이름 master, development 또는 skip_branch_name 으로 시작하는 모든 지점이 삭제되지 않는다는 것을 의미한다.
위의 지점을 수정할 수도 있고, 삭제하고 싶지 않은 지점을 추가할 수도 있습니다.
4단계: 현재 체크 아웃된 브랜치에 병합된 모든 로컬 브랜치 제거
git branch --merged | egrep -v "(^\*|master|development|skip_branch_name)" | xargs git branch -d
단계 5: 명령에 대한 글로벌 별칭 설정deleted-merged
git config --global alias.delete-merged 'git branch --merged | egrep -v "(^\*|master|development|skip_branch_name)" | xargs git branch -d'

현재 작업 디렉터리의 노화되지 않은 파일 버리기


현재 작업 디렉터리에 있는 모든 노화되지 않은 파일을 버리려면
git checkout -- .
특정 파일의 경우
git checkout -- path/to/file/to/revert
-- 는 해체에 사용됩니다argument ambiguation.

로컬 및 원격 분기 이름 바꾸기


1단계: 로컬 브랜치 이름 바꾸기
이름을 바꿀 브랜치에 있는 경우:
git branch -m <new-name>
다른 지점에 있는 경우:
git branch -m <old-name> <new-name>
단계 2: 원격 브랜치 삭제 및 밀어넣기<old-name> 로컬 브랜치
git push origin :<old-name> <new-name>
3단계: 로컬 브랜치의 업스트림 브랜치 재설정
브랜치로 전환한 다음:
git push origin -u <new-name>

Git 로그 미화


다음과 같이 Git 로그를 포맷하고 앨리어스를 설정할 수 있습니다.

1단계: 글로벌 Git 구성 파일에서 다음 별칭 설정
git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative"
단계 2: 필요한 경우 추가 플래그 추가
# filter by start date
--after="2016-01-31"
--since="2016-01-31"

# filter by end date
--before="2017-03-10"
--until="2017-03-10"

# filter by author
--author="Zean Qin"
제가 가장 많이 쓰는 명령은요.
git lg --after="yesterday" --author="Zean"

Git diff 미화


나는 diff-so-fancy를 사용하여 차이를 더욱 읽을 수 있게 했다.따라가다
git diff

공식 설정 단계 삭제된 다른 브랜치의 원격 추적 브랜치 자동 트림


없음<new-name>, 지점에 대한 원격 추적 지점
다른 한쪽은 이미 제거되어 영원히 그곳에 남을 것이다.
모든 Git 저장소에서 항상 <new-name> for git fetch --prune--prune:
git config --global fetch.prune true
항상 git fetch
git config remote.origin.prune true
                 #^^^^^^
                 #replace with your repo name

Git에서 Vim을 편집기로 사용하여 커밋 메시지 작성


Git에 대한 편집기만 설정하려면 다음 중 하나를 수행합니다.
  • Git 구성에서 설정git pull: --prune
  • 설정core.editor 환경 변수: git config --global core.editor "vim"
  • Git 및 기타 프로그램에 대한 편집기를 설정하려면 표준화GIT_EDITORexport GIT_EDITOR=vim 환경 변수를 설정합니다.
    이 두 개의 매개 변수를 동시에 설정해야 하는 것은 아니지만, 일부 프로그램에서는 더 정확한 매개 변수 VISUAL 를 사용할 수 없습니다.
    export VISUAL=vim
    export EDITOR="$VISUAL"
    

    공구서류

  • How do I delete a Git branch locally and remotely?
  • How do I check out a remote Git branch?
  • Git add and commit in one command
  • How do I make Git use the editor of my choice for commits?
  • How do I discard unstaged changes in Git?
  • Rename a local and remote branch in git
  • Good-lookin' diffs. Actually… nah… The best-lookin' diffs.
  • Automatic prune with Git fetch or pull
  • fetch: make --prune configurable
  • 좋은 웹페이지 즐겨찾기