사용자 설정
working directory (untracked, tracked) -> staging area -> .git directory(repository) -> remote
공통
명령어 | 옵션 | 설명 | 예시 | 비고 |
--global | 글로벌적으로 | |||
rm -rf .git | 깃 삭제 | |||
-h --help |
도움말 보기 | git status -h | ||
사용자 설정
명령어 | 옵션 | 설명 | 예시 | 비고 |
git config | --list | 설정 확인 | git config --list | |
vscode로 에디터 설정 | git config --global core.editor "code --wait" | |||
사용자 이름 설정 | git config —global user.name blarblar | |||
사용자 메일 설정 | git config —global user.email blarblar@gmail.com | |||
user.name | 원하는 속성 확인 | git config user.name | ||
core.autocrlf | 운영체제별 줄바꿈 다른 이슈 해결 | git config --global core.autocrlf input | true | |
—global alias | 단축어 설정 | git config —global alias.st status | ||
init.defaultBranch | 기본 브랜치 master -> main으로 변경 | git config --global init.defaultBranch main | ||
core.editor | 기본 에디터 vim -> vsCode 로 변경 | git config --global core.editor "code --wait" |
기본 명령어
명령어 | 옵션 | 설명 | 예시 | 비고 |
git init | 깃 초기화(생성) | |||
git clean | 저장소에서 추적하지 않는 파일들(Untracked files)을 삭제 | |||
-fd | git clean -fd : force적으로 directory 삭제 | (force directory) | ||
git status | -s (간단히) | 깃 상태 보기 | ||
git add | staging area로 이동 | git add * (.gitignore에 있는 파일까지 모두 add) git add . (.gitignore에 있는 파일 빼고 모두 add) |
||
git rm | --cached | stg -> wd(untracked)이동 | ||
git diff | wd에 있는 변경사항 비교 | |||
--staged --cached |
stg에 있는 변경사항 비교 | |||
git diff [hashCode] [hashCode] | 해시코드로 두 커밋 비교 | git diff bd7bd285 bd7bd285 |
||
git difftool | 에디터에서 변경사항 비교 | |||
git commit | stg에서 prd로 커밋 | |||
-a | wd에서 prd로 바로 커밋 | add 생략하고 한번에 커밋 | (all) 추적되는 파일이어야 함. | |
-m | 커밋 메세지 | git commit -m "first commit" | ||
--amend | 커밋 내용을 변경 (수정한 파일을 최근 커밋에 그냥 덮기) | 1. 변경된 파일을 stg에 올린다. 2. git commit —amend 한다. 3. 메세지도 변경하고 싶으면 -m 옵션을 추가한다. (git commit —amend만 잘 안되어서, -m 옵션까지 하니 잘 되었다ㅠ) |
||
--amend -m | 커밋 메세지 변경 | git commit --amend | 화면 새로 뜨면 거기에 수정 후 저장 | |
git rm | 삭제하면서 바로 stg로 이동 | git rm a.txt | ||
git mv | 파일명 변경하면서 바로 stg로 이동 | git mv a.txt b.txt | ||
git show | [hashCode] | 해당 커밋 내용 자세하게 보기 | ||
[hashCode]:[FileName] | 해당 해시코드 커밋 중 특정 파일의 커밋 내용만 확인 | git show bd7bd285:about.html | ||
[tagName] | 태그 내용 상세히 보기 | |||
HEAD | 현재 HEAD의 커밋 상세히 보기 |
log
명령어 | 옵션 | 설명 | 예시 | 비고 |
git log | 커밋 로그 확인 | 드림코딩 3.12강의 참고 | ||
-p | 로그 자세히 보기 | (patch) | ||
--oneline | 한줄로 간단히 보기 | |||
—reverse | 최근 커밋부터 보기 | |||
--graph | 로그를 그래프처럼 보여주기 | |||
-[Number] | 원하는 개수만 보기 | git log -3 | ||
포맷화하여 보기 | --pretty=format:"%h %an %ar %s" | |||
원하는 작성자로 보기 | —author="sunny" | |||
날짜 지정하여 보기 | —before="2020-10-20" | |||
타이틀명 필터하여 보기 | —grep="project" | |||
-S | 코드내용 필터하여 보기 | -S "about" | 코드 내용중에 about이 포함된 커밋만 보기 (-p를 붙이면 자세히 보여줌) | |
[FileName] | 원하는 파일의 커밋만 보기 | git log about.txt |
tag
명령어 | 옵션 | 설명 | 예시 | 비고 |
git tag | repository의 모든 태그 확인하기 | 드림코딩 3.15강의 참고 | ||
[tagName] | 특정 커밋을 북마크 | git tag v2.0.0 | 해당 헤드가 가르키는 커밋에 태그됨 | |
[tagName] [hashCode] | 특정 커밋에 태그 작성 | git tag v1.0.1 123456a | ||
[tagName] [hashCode] -a -m 또는 -am "tagMessage" | 특정 커밋에 상세 메세지 넣어서 태그 작성 | git tag v1.0.1 123456a -am "Release note..." | ||
-l "와일드카드" | 특정 문자열이 포함된 태그 확인하기 | git tag -l "v1.*" | ||
-d [tagName] | 태그 삭제하기 | |||
stash
명령어 | 옵션 | 설명 | 예시 | 비고 |
git stash | wd에 있는 작업들을 잠시 stash stack에 보관 | git stash push -m "first try" | 기본적으로 untracked파일들은 올라가지 않는다 | |
--keep-index | stg에 있는 것을 유지하면서 stash stack에 보관 | git stash push -m "second try" --keep-index | 수정 파일이 stg에 올라가 있는 상태에서 stash를 하는 경우, stg의 수정사항 그대로 유지시키면서 stash | |
-u | untracked 파일들까지 stash | git stash -u | ||
git stash list | stash 목록 확인 | |||
git stash show | [stash아이디] | 각 stash 확인 | git stash show stash@{1} | |
-p | 각 stash 자세히 확인 | |||
git stash apply | [stash아이디] | stash 목록 유지하며 stash 가져오기 | id를 지정하지 않으면 가장 위의 stash를 적용 | |
git stash pop | [stash아이디] | stash 목록에서 제거하며 stash 가져오기 | stash 리스트에서 사라짐 | |
git stash drop | [stash아이디] | 특정 stash 삭제 | ||
git stash clear | stash 전체 삭제 | |||
git stash branch | [new branch name] | stash를 적용하면서 새로운 branch 생성 | git stash newBranch |
브랜치
명령어 | 옵션 | 설명 | 예시 | 비고 |
git branch | 브랜치 확인 | 현재 repository의 브랜치들 확인 (로컬 피씨의 브랜치만 보여줌) |
||
--all | 서버에 있는 브랜치들까지 전부 보여줌 | |||
[newBranchName] | 브랜치 생성 | git branch new-branch | ||
—merged | 현재 브랜치에 merge된 브랜치들 확인 (브랜치 생성만되고 커밋되지 않은 것들도 포함) | 반대는 —no-merged | ||
-D [branchName] | 브랜치 삭제 | |||
--delete | git 원격 브랜치 삭제 | git push origin --delete [branchName] | -D 옵션으로 삭제 안됨 ! --delete 옵션으로 삭제 해야함. |
|
—move [원래이름] [바꿀이름] | 브랜치 이름 변경 | |||
-M [newBranchName] | git branch -M main | 현재 체크아웃된 브랜치네임을 다른네임으로 바꿔줌 (지금 체크아웃된 브랜치가 master라면, master브랜치네임이 main으로 바뀜) | ||
git switch | [branchName] | 원하는 브랜치로 이동 | checkout과 같은 기능이지만 git version 2.23.0부터 더 직관적인 명령어를 쓰기 위해서 생겨난 것 | |
-C [newBranchName] | 새 브랜치를 만들면서 동시에 이동 | (create) | ||
git checkout | [hashCode] | 특정 커밋으로 head변경 | git checkout 01f2b68 | |
[tagName] | 특정 태그로 head변경 | |||
[branchName] | 특정 브랜치로 head변경 | |||
-b [newBranchName] | 새 브랜치를 만들면서 동시에 이동 | (branch) | ||
-b [newBranchName] [tagName] | 특정 태그로 체크아웃하면서 동시에 브랜치 만들기 | git checkout -b testBranch v1.0.1 | testBranch라는 브랜치가 v1.0.1에서 만들어짐 | |
— [fileName] | wd에서 취소 wd에서 수정한 파일을 최근 커밋한 버전의 파일로 초기화 | git checkout — new.txt | *. stg올라간건 안됨. working directory만 해당 * git restore [fileName]과 같음 |
|
git cherry-pick | 필요한 커밋만 가져오기 | git cherry-pick f2b9178 | master 브랜치로 checkout 후 명령 |
취소
명령어 | 옵션 | 설명 | 예시 | 비고 |
git restore | wd에서 취소 wd에서 수정한 파일을 최근 커밋한 버전의 파일로 초기화 | 1. git restore new.txt 2. git restore . |
untracked 파일은 초기화 되지 않음 → git clean -fd를 이용하여 지워야함. | |
—staged | stg에서 취소 wd에서 수정한 파일을 최근 커밋한 버전의 파일로 초기화 (add의 반대) | |||
—source=HEAD~2 [fileName] | 특정 커밋 버전의 파일로 초기화 | git restore —source=HEAD~2 . | head에서 두번째 아래 버전의 커밋으로 모든파일 초기화 | |
git reset | 특정 커밋 버전으로 커밋을 초기화 | git reset HEAD~2 | 커밋도 삭제되고, 파일은 특정 커밋 버전 이후 wd까지 초기화 | |
HEAD [fileName] | 특정 커밋 버전의 파일만 초기화 | 1. git reset HEAD . 2. git reset HEAD~2 new.txt |
커밋은 그대로 있고 파일만 그 상태로 초기화됨 | |
—mixed [특정커밋위치] | 특정 커밋 버전으로 커밋을 초기화 (작업 중 파일 wd에 포함) | git reset의 디폴트 옵션 ( 버전 히스토리에서는 커밋을 삭제하지만, wd에서 작업하고 있던 내용들은 복원 ) | ||
—soft [특정커밋위치] | 특정 커밋 버전으로 커밋을 초기화 (작업 중 파일 stg에 포함) | 버전 히스토리에서는 커밋을 삭제하지만, stg에서 작업하고 있던 내용들은 복원 | ||
—hrad [특정커밋위치] | 특정 커밋 버전으로 커밋을 초기화 (작업 중 파일 미포함) | 특정 커밋 버전으로 커밋한 직후 (수정한 작업파일 없는 상태로) | ||
—hard [특정로그 해시코드] | 특정 로그의 커밋상태로 헤드를 이동(reflog활용) | git reset —hard e94152f | ||
git reflog | 이전 헤드가 가리키고 있던 내용들의 로그 리스트 | |||
git revert | 특정 커밋의 변경사항을 취소해주는 커밋 생성 | git revert [hashCode] git revert HEAD~2 |
이미 서버에 올라간 경우라면, reset과 rebase가 아닌 revert를 사용하는 것이 맞음 | |
—no-commit [hashCode] | 특정 커밋의 변경사항을 취소해주면서 커밋은 생성하지 않음 | |||
merge
명령어 | 옵션 | 설명 | 예시 | 비고 |
git merge | fast-forward merge | git merge fix | 헤드가 마스터에 있는 상태에서 마스터에 병합할 브랜치네임을 지정해준다. | |
--no-ff | NO fast-forward-merge | git merge --no-ff fix-c | ||
--abort | 머지 취소 | |||
--continue | 머지 진행 | 충돌 사항을 수정한 후에 git add 해당파일 → git merge —continue 진행 | ||
git mergetool | 에디터에서 머지 | |||
git rebase | 머지 | 베이스를 재설정하는 느낌 서버에 올라가 있는 경우는 사용하지 말 것 ! |
||
특정 브랜치를 master브랜치의 가장 최신 커밋으로 이동 | git rebase master | rebase하고 싶은 브랜치로 checkout 한 후에 명령 | ||
--onto | 다른 브랜치에서 파생된 브랜치만 독립적으로 master브랜치에 머지 | git rebase --onto master profile profile-ui (profile브랜치에서 파생된 profile-ui브랜치를 master에 올리기) | 드림코딩 4.10강의 참고 | |
-i | 이전 커밋 수정 | git rebase -i [hashCode] | (interactive) * 그 이후 옵션을 선택하여 각종 변경사항을 적용할 수 있음. * 변경을 원하는 해시코드의 이전 해시코드를 입력해야함. * 변경한 커밋의 이후 커밋들 모두 뉴 커밋들이 되어 새로 생성되므로 해시코드도 변경됨 * 드림코딩 6.8강의 참고 |
remote
명령어 | 옵션 | 설명 | 예시 | 비고 |
git remote | -v | git origin 저장소 주소 확인 | ||
git push | prd에서 remote로 푸시 | |||
-f | prd와 remote의 커밋이 다른 경우, remote커밋을 무시하고 prd커밋을 반영하게 하며 push | * remote에 다른 커밋이 있고, wd에서도 다른 커밋이 잇는 경우에 push를 하게되면 에러가 뜸. * 로컬과 원격에서 동시에 같은 파일이 수정되고, 로컬에서 push 할때, git push -f을 하게 되면 원격 커밋사항은 사라지고 , 로컬의 커밋으로 갈아엎어진다. (기존의 git history를 rebase를 이용하여 변경하는 경우 부득이하게 이용 할 수 있음) |
||
--delete | 삭제한 브랜치 원격에도 업데이트 | git push origin --delete fix | origin 원격에서 fix 브랜치 삭제 | |
--set-upstream | 변경한 브랜치 네임 원격에 업데이트 | git push --set-upstream origin fix-welcome | origin 원격에 fix-welcome이라고 수정한 브랜치 네임 업데이트 | |
git push 후 git merge origin/main 를 한번에 해주는 같은 명령어 = git fetch (테스트 해봤는데 안됨. merge 또 해야 함.)
git difftool 설정하기
git config --global -e 로 git config에 글로벌로 설정되어 있는 파일을 에디터로 열어서 아래 내용 추가
// diff 툴은 vscode 사용
[diff]
tool = vscode
// code 다음에 터미널에서 기다리고, local과 remote를 비교
[difftool "vscode"]
cmd = code --wait --diff $LOCAL $REMOTE
git log 포맷
$git log --graph --all --pretty=format:'%C(yellow)[%ad]%C(reset) %C(green)[%h]%C(reset) | %C(white)%s %C(bold red){{%an}}%C(reset) %C(blue)%d%C(reset)' --date=short
git hist alias 만들기
$git config --global alias.hist "log --graph --all --pretty=format:'%C(yellow)[%ad]%C(reset) %C(green)[%h]%C(reset) | %C(white)%s %C(bold red){{%an}}%C(reset) %C(blue)%d%C(reset)' --date=short"
semantic versioning
major: 특정 기능이 추가, 전체적입 업데이트가 발생했을 때
minor: 커다란 기능 중에 조금의 기능들이 업데이트, 개선했을 때
fix: 기존의 기능에서 오류수정을 했을 때, 성능이 조금 개선되었을 때
merge conflict
1. 수동으로 해결하기
$ git checkout master
$ git merge feature
! conflict 발생 !
conflict 발생한 파일 열어서 conflict 해결 후 저장
$git status로 파일이 staging area에 있는지 확인 후 이동 (아마 working directory에 있을 것. $git add .로 이동)
$ git merge --continue
2. VS Code로 해결하기
git config --global -e 로 git config에 글로벌로 설정되어 있는 파일을 에디터로 열어서 아래 내용 추가
// merge툴은 vscode 사용
[merge]
tool = vscode
// code 다음에 터미널에서 기다리고 머지
[mergetool "vscode"]
cmd = code --wait $MERGED
// 머지하고 나서 .orig 파일 생기는 것 false
[mergetool]
keepBackup = false
$ git mergetool
vscode에서 conflict 해결 후 저장
$git status로 파일이 staging area에 있는지 확인 후 이동 (아마 있을 것 바로 진행)
$ git merge --continue
2. p4merge로 해결하기
p4merge 설치
git config --global -e 로 git config에 글로벌로 설정되어 있는 파일을 에디터로 열어서 아래 내용 추가
// merge툴은 p4merge 사용
[merge]
tool = p4merge
// code 다음에 터미널에서 기다리고 머지
[mergetool "vscode"]
cmd = code --wait $MERGED
// 머지하고 나서 .orig 파일 생기는 것 false
[mergetool]
keepBackup = false
// p4merge의 경로 지정
[mergetool "p4merge"]
path = "/Applications/p4merge.app/Contents/MacOS/p4merge"
// 윈도우의 경우
[mergetool "p4merge"]
path = "C:/Program//Applications/p4merge.app/Contents/MacOS/p4merge"
$ git mergetool
vscode에서 conflict 해결 후 저장
$git status로 파일이 staging area에 있는지 확인 후 이동 (아마 있을 것 바로 진행)
$ git merge --continue
Rebase
fast-forward merge 하기
$ git checkout feature-a
$ git rebase master
$ git checkout master
$ git merge feature-a
git revert
충돌 주의! (같은 파일을 수정한 경우!)
- 순서대로 1,2,3,4 커밋이 있을 때
- 현재 4에서 1커밋의 상태로 돌리고 싶다.
- 2커밋을 revert(취소)하면 1커밋 상태로 돌아갈 것만 같다.
- 하지만 git revert [2해시코드]로 해서는 충돌이 발생한다.
- git revert 3, git rever 2 이렇게 역순으로 하는 것을 권고한다 !
- 만약 같은 파일이 수정된게 아니라면 정상적으로 된다.
'개발 환경 > GitㆍGitHub' 카테고리의 다른 글
git 자주쓰는 명령어와 TIP (0) | 2022.08.02 |
---|---|
이미 올라간 node_modules 삭제하기 (0) | 2022.05.27 |
이미 올라간 파일 .gitignore에 추가 & git remote에서 삭제하기 (0) | 2022.04.13 |