git help
- 주요 command에 대한 설명
git commit --help
- 특정 command에 대해 궁금할 경우
--help
를 붙여서 도움말을 볼 수 있음.
git config --global user.email "email@example.com"
git config --global user.name "Bashful Smith"
- commit 에 표시할 이메일 설정 (필수)
- commit 에 표시할 이름 설정
git config --global -l
git config --local -l
- global 설정 목록 보기
- local 설정 목록 보기
git config --global diff.wsErrorHighlight all
whitespace 차이 보기
git init
- 해당 프로젝트 폴더에서 실행
.git
폴더가 생김
git clone xxx://xxx@xxx.xxx/xxx
cd xxx
- xxx 폴더가 만들어지고 받아짐.
- 나머지는 Git 명령들은 거기 폴더 들어가서 실행
git status
- 현재 작업중인 브랜치가 어디인지 보여줌
- 작업중인 브랜치에서 내가 수정/삭제/생성한 파일의 목록을 보여줌
- index 에 올라간 변경사항 목록도 함께 보여줌
git diff
- 작업중인 브랜치에서 변경된 파일의 중 index에 올라가진 않은 파일의 변경 내용을 보여줌
git diff --cached
- 작업중인 브랜치에서 변경된 파일의 중 index에 올라간 변경 내용을 보여줌
git log
- 최근 커밋들에 대한 정보를 보여줌
- 현재 작업중인 브랜치를 기준
git log --oneline --decorate --graph
--online
한줄씩--decorate
브랜치나 태그 정보도 보여줌--graph
merge 된 경우 그 관계를 그래프로 보여줌
git checkout file_or_folder
git checkout origin/issue-1 -- file_or_folder
--
이후에는 브랜치 이름이 올 수 없음. 대상 파일이나 폴더를 지칭하겠다는 것을 명시.
git checkout issue-2
- issue-1 브랜치에서 작업하고 있다가 issue-2 브랜치에서 작업하고 싶을때
- 파일의 내용들이 issue-2 브랜치에 해당하는 내용들로 일괄 수정됨.
- issue-2 가 브랜치 이름이 아닌경우 파일 이름인지 체크하게 됨.
- 브랜치 이름 대신 tag 이름이나 commit id 를 쓰면 현재 작업 중인 브랜치 가 없는 detached head 상태가 됨.
(issue-1 브랜치에서 작업하고 있다가 issue-1을 다른 커밋으로 옮겨서거기서 계속 issue-1 브랜치에서 작업하고 싶을때)
git reset --hard HEAD~3
git reset --hard origin/issue-1
git reset --hard issue-1-hoyeong
git add file_or_folder
git reset file_or_folder
git commit
- 편집창에서 저장하면 완료됨
git commit --amend
- 새로운 커밋을 만들지 않고, 직전 커밋에 변경사항을 추가함.
- 커밋 메시지가 틀린경우에 수정하기 위해 실행할 수도 있음.
git fetch
- 실재 파일들에는 직접적 영향 없음
git pull
은 현재 브랜치에서 merge commit 만들면서 실재 파일들도 수정하게 됨
(누가 새로운 내용을 origin/master에 올렸다면 git fetch 한 상태애서 아래 명령 실행하여 새로운 커밋 만들기)
git merge origin/master
git rebase origin/master
- 내 브랜치에서 작업한 커밋들이 대상 브랜치 위로 올라가도록 새로운 커밋들을 만듬
git rebase -i HEAD~4
-i
는 commit 들의 내용을 보면서 작업함- drop: 해당 commit 제외하기.
- squash: 해당 commit 을 이전 commit 과 합치고 commit 메시지도 합치기. (편집창이 새롭게 뜸)
- fixup: 해당 commit 을 이전 commit 과 합치고 commit 메시지는 버리기.
- 줄을 통째로 옮겨 놓으면 commit 들 간의 순서 바꾸기 가능
git cherry-pick commit_id
- 특정 커밋을 현재 브랜치로 콕 찍어서 가지고 옴
- commit ID 대신 브랜치 이름을 지정할 경우에도 그 브랜치가 가리키고 있는 commit 하나만 가지고 옴.
void main() {
<<<<<<< HEAD
int a = 4;
=======
int b = 3;
>>>>>>> new_branch_to_merge_later
}
git status
에서 conflict가 난 파일을 찾을 수 있으며 혹은<<<<<<<
등으로 전체 프로젝트에서 검색해서 conflict 가 발생한 파일을 찾아볼 수 있음.main.c
파일에서 conflict가 났다면main.c
의 conflict가 난 부분이 위의 예시 처럼 바뀌어 있음.new_branch_to_merge_later
의 커밋을 HEAD로 가져오다가 conflict 가 발생하였다는 의미임.
void main() {
int b = 4;
}
- text editor 에서
main.c
파일을 위와 같이 원하는 방식으로 직접 수정하면 됨.
git add main.c
git rebase --continue
main.c
의 수정이 끝났다면 위와 같이 하려고 했던 작업(pull/merge/rebase/cherry-pick)을 진행할 수 있음.
git rebase --abort
만약 conflict를 해결하고 싶지 않다면 위와 같이 --abort
해서 원래의 하려던 작업 진행 전 상태로 돌아갈 수 있음.
git push
git push -f
- 강제로 올릴땐
-f
git tag v1.0.0
git stash
- Untracked files 을 제외한 나머지 현재 작업중인 변경사항들을 stash 에 보관함.
- 다시 파일을 수정 후
git stash
하면 추가로 다시 stash 에 보관할 수 있음.
git stash pop
- stash 에 있는 변겨사항을 꺼내와서 다시 파일들에 적용함.
- 마지막에 보관한 내용이 제일 먼저 나옴. (LIFO)