목차 (클릭시 해당 목차로 이동)
기본 명령어
git init .
이 폴더를 git을 사용할 폴더로 만든다.
. : 현재 폴더
그러면 .git 폴더가 생성된다. 이곳에 버전정보들이 적혀있다.
git status
현재 상태를 볼 수 있는 명령어.
어떤 파일이 생성되었는지 (working space) : untracked
어떤 파일이 add 되었는지 (staging area) : committed
어떤 파일이 수정되었는지 (staging area) : modifed
로 표시된다.
git add {}
working tree에 있는 파일,디렉토리 중 {}안에 있는 것들을 staging area로 옮긴다.
- git add . : 현재 디렉토리
- git add 파일 : 해당 파일
- git add 파일 파일 파일 : 여러파일도 가능
- git add 디렉토리 : 디렉토리도 가능
만약
warning: LF will be replaced by CRLF in welcome.The file will have its original line endings in your working directory
오류 발생시에는 아래 링크 참고
2021.04.21 - [Web/팁] - warning: CRLF will be replaced by LF in gradlew.bat. 문제해결방법
git commit -m "commit message"
현재 staging area에 있는 것들을 repository로 옮긴다.
git commit --amend
직전에 커밋한 메세지를 수정할 수 있다.
git commit -am "commit message"
- git add .
- git commit -m "commit message"
차례로 실행
대신에 한번도 add되지 않은 파일은 실행되지 않는다.
git tag -a {태그명} -m "{태그 메세지}"
annotation 태그를 달 수 있다.
git push origin {올릴 태그 명}
원격 저장소에 태그를 올릴 수 있다.
git tag -d {삭제할 태그 명}
잘못만든 태그를 삭제할 수 있다.
git push origin :{삭제할 태그 명}
원격저장소에 올라간 태그를 삭제할 수 있다.
git log
지금까지의 버전들을 볼 수 있다.
git log --stat
지금까지의 버전들에서 어떤 파일들이 수정되었는지 볼 수 있다.
git log -p
지금까지의 버전들에서 어떤 파일들이 어떻게 수정되었는지 볼 수 있다.
git log --all --graph --oneline
모든 log의 정보를 그래프로, 한줄로 간략하게 볼 수 있다.
git diff
현재 어떤 파일이 수정되었는지, 어떻게 수정되었는지 볼 수 있다.
git branch
현재 브랜치의 목록들을 볼 수 있다.
git branch {원하는 브랜치의 이름}
현재 커밋 시점에서 브랜치를 생성한다.
git checkout {commit id or branch}
head가 가리키고 있는 곳 (브랜치) 을 옮길 수 있다.
과거 버전의 commit id를 넣으면(git checkout f1caaff7bda970c79806d30e6281172310742f2f)
그 버전으로 폴더의 파일들이 싹 바뀌고,
원래 쓰던 브랜치를 넣으면 (git checkout master)
그 버전으로 폴더의 파일들이 바뀐다.
git checkout -t origin/{원하는 브랜치의 이름}
원하는 remote 브랜치를 가져올 수 있다.
git merge
git reset --hard {commit id}
해당 commit id 의 버전으로 reset 하겠다. (해당 버전 이후는 다 삭제하고 그 버전으로 돌아가버림)
현재 브랜치는 해당 commit id의 버전을 가리킨다.
git revert {commit id}
해당 commit id의 버전을 revert 한다. = 해당 commit id로 변경될 때의 변경사항을 되돌린 새로운 버전을 추가한다.
해당 commit id로 변경될 때의 변경사항을 되돌린 새로운 버전 이기 때문에 가장 마지막 commit id 에 대해서만 revert 할 수 있다.
예전의 commit으로 revert 하기 위해서는 역순으로 마지막 커밋들을 revert하며 되돌아가야 한다.
git remote add {저장소별명 (보통은 origin)} {저장소 주소}
해당 원격 저장소 주소로 해당 지역 저장소를 연결한다.
git remote remove origin
기존의 원격 저장소를 제거한다.
git push origin {orgin에 생성할 브랜치 명}
remote repository에 {}에 적은 브랜치를 생성한다.
git branch --set-upstream-to {origin/~~}
현재 local 브랜치와 {}에 적은 remote의 브랜치를 연결시킨다.
git branch --delete {삭제할 브랜치}
{}에 적은 브랜치를 삭제한다.
삭제할때는 삭제할 브랜치의 부모 브랜치로 checkout 한 뒤 삭제해야한다.
git branch -D {삭제할 브랜치}
작업된 사항이 남아있을 때는 브랜치가 삭제되지 않을 수 있다.
-D 를 입력하면 강제로 삭제할 수 있다.
git push origin :{origin에서 삭제할 브랜치}
remote 브랜치를 삭제할 수 있다.
git push -u {지정한 저장소별명} {push할 브랜치}
-u {지정한 저장소별명} {push할 브랜치} 는 지역저장소에서 맨 처음 push를 할때 쳐야하는 명령어이다.
-u 후 저장소이름과, 브랜치를 지정하면,
앞으로 git push 만 쳐도 지정했던 저장소명과 브랜치로 push가 된다.
git clone {저장소 주소}
맨 처음 다른 컴퓨터에서 이미 있던 저장소를 가져올때 사용하는 명령어이다.
그래서 맨 처음 저장소를 만들때 쓰는 명령어는
- git init .
- git clone {저장소주소}
이 두가지 이다.
git pull
이미 연결된 저장소에서 가져올 때 사용하는 명령어이다.
협업하기 (github)
github
github settings 의 Manage accsess 에서 프로젝트를 진행할 사람 초대하기
두 곳에서 push -> rejected
두 곳에서 같은 파일을 수정하고 push를 하면 나중에 push한 곳에서는 reject가 난다.
그래서 항상 먼저 git pull 을 통해 수정사항이 없는지 확인하고,
만약 같은 파일을 수정했으면 자동으로 merge complict가 발생한다. 여기서 수정사항을 알맞게 수정하고
- git add {해당파일}
- git commit
- git push
를 해주면 된다.
협업하기
- 작업전 git pull
- 작업
- add, commit
- push
pull 대신 fetch 이용
신중하게 git 의 데이터를 일단 가져오고 싶을때 사용한다.
git pull 은 origin의 브랜치로 지역의 브랜치까지 바꿔버리는데,
git fetch를 하면 현재 지역저장소의 헤드가 가리키는 브랜치를 유지하고,
원격 저장소의 헤드가 가리키는 origin/master 브랜치를 따로 가져온다.
왼쪽은 pull로 가져왔고 오른쪽은 fetch로 가져왔다.
왼쪽은 HEAD (지역 저장소), origin/master 가 가리키는 브랜치가 같다.
오른쪽은 HEAD (지역 저장소), origin/master 가 가리키는 브랜치가 다르다.
cli로 git 사용할때 맨 처음 해야할 순서
- git init .
- git add .
crlf 오류시 git config --global core.autocrlf true input - git commit -m "inital commit"
- git remote add origin https://www.github.com/dongho108/~~
- git push -u origin master
- git branch --set-upstream-to origin/master
- git push
local, remote 둘 다 사용할 브랜치 생성하기 (develop)
- git branch develop
- git push origin develop
- git checkout develop
- git branch --set-upstream-to origin/develop
공부 키워드
tag -> commit id 말고 태그달기
git flow, git workflow -> 프로젝트시 git 브랜치를 어떤식으로 구성할지
cherrypick -> 과거의 다른 브랜치의 수정사항을 가져와 merge 하기
rebase -> timeline을 훨씬 깔끔하게 할 수 있다.
ssh -> 원격저장소간 통신시 자동으로 로그인
깃호스팅 사이트의 기능 이슈트래커
gerrit -> 팀원끼리 코드업데이트 투표