기본적인 명령어
.gitignore 파일
- 특정 파일 또는 디렉토리를 버전관리에서 제외시키기
$git init
- 깃 저장소 만들기
- 깃을 사용할 수 있도록 디렉토리 초기화하는 작업
- ' Initialized empty Git repository.... ' 라는 메시지가 나타난다면 이제 사용 가능!!
- .git 이라는 디렉토리가 생길 것 (보이지 않을 경우 숨긴 파일에 있을 가능성
$git status
- 현재 어느 브랜치에 있는지, 커밋한 상황들, 커밋할 파일이 남아있는지 등의 정보를 알려줌
$git remote add origin [깃허브 레파지토리 url]
- 깃허브에서 만든 레파지토리를 원격 저장소로 추가
$git remote
- 추가한 레파지토리를 확인할 수 있음
$git add
- 수정한 파일을 스테이징 하기
- git add . 은 현재 수정된 파일을 한꺼번에 스테이지에 올리기
$git commit -m "커밋 내용"
- 버전을 만드는 작업
- 스테이지에 있던 파일이 저장소로 옮겨짐
- LF will be replaced by CRLF 오류 발생 시 --> 무시 or $git config core.autocrlf true 입력
$git commit --amend
- 가장 최근의 커밋 메시지 수정하기
- $git commit --amend -m "새로운 커밋 내용" 으로 바로 수정 가능
$git log
- 커밋 내역을 확인할 수 있는 명령어
- 옆에 (HEAD->master) 는 이 버전이 가장 최신이라는 표시임
$git revert [커밋 번호]
- push까지 했는데 commit한 내용(파일 복구 등) 복구하고 싶을 때
$git reset --hard ORIG_HEAD
- 로컬에서 branch간에 방금 merge한거 취소하고 싶을 때
$git reset HEAD [파일명]
- add 한 것, 즉 스테이징 한 것을 취소하고 싶을 때
- 파일명 작성 안하고 $git reset HEAD 만 하는 경우 방금 add한 것 다 취소됨
$git pull origin master
- pull은 fetch + merge 효과
- → fetch는 ? 단순히 원격 저장소의 내용을 확인만 하고 로컬 데이터와는 병합하지 않음! 원격 저장소의 최신 이력 확인 가능
$git reset HEAD^
- 가장 최근 commit 삭제하기
$git reflog
- 저장된 head 변경 이력을 볼 수 있음
- $git rebase 또는 $git reset 등으로 커밋이 삭제되는 경우 이러한 git 이력을 보관
$git rebase
main에서 pull 받은 후, 브랜치(issue-10) 파서 작업하던 중(이미 몇 개의 commit 했었음) main에서 또다른 커밋 발생..
그 업데이트 된 main 브랜치 내용을 받아와서 작업 이어가고 싶다
--> $rebase issue-10 onto origin/main
상황별 명령어
※ commit 메시지 변경하기
가장 최근 commit 메시지 변경:
$ git commit --amend -m "새로운 커밋 내용"
과거의 여러 commit 메시지 변경:
- $ git rebase -i HEAD~2 : HEAD로부터(가장 최근) 몇 개를 수정하고 싶은지, 2 대신에 그 개수를 입력
- 그러면 그 개수만큼의 commit 내용이 뜨고 수정하고 싶은 commit 앞에 pick키워드 → reword로 변경 후 esc 하고 :wq로 저장
- 그러면 메시지를 바꿀 수 있도록 뜨고, 수정 후에 esc 하고 :wq로 저장
- 완료!!
첫번째 initial commit을 push까지 했지만 commit 삭제하고 싶을때
$ git update-ref -d HEAD
※ commit 복구하기
$git reflog : 삭제된 commit id 확인
$git reset --hard [커밋 id] : 커밋 id는 현재 가고싶은 커밋의 id
※ 이미 원격 저장소에 올라간 commit 메시지 바꾸고 싶을 때
$git commit --amend -m "새로운 커밋 내용"
$git push -force [브랜치 이름]
※ 이미 원격 저장소에 올라간 commit을 지우고 싶을때
$git reset --hard HEAD~2 : Head로부터 지우고 싶은 커밋 개수
$git push -f origin master(브랜치이름)
※ push한 내용 되돌리기 , 돌아가기
- 가장 최근 commit 삭제할 경우에는 $git reset HEAD^
- 되돌아가고 싶은 특정 commit 있는 경우
$git reflog : 커밋 id 확인
$git reset [커밋 id] : 되돌아가고 싶은 커밋으로 돌아감 (마지막으로 남았으면 하는 커밋)
$git commit -m "커밋삭제했다"
$git push origin master[or 브랜치 이름] -f
※깃허브에서 소스파일 다운받기
$git clone [해당 원격저장소의 url]
$git clone -b [branch 이름] [원격저장소의 url] : 특정 branch만 내려받기
※깃허브에서 소스파일 다운받기
리모트에 있는 브랜치 정보들 조회하기 전 브랜치 정보를 업데이트해오기
$git remote update 한후
$git checkout [이동하고 싶은 브랜치이름]
※브랜치 정보 조회
$git branch -r : 원격 브랜치 정보 조회
$git branch -a : 로컬 브랜치 정보 조회
깃허브에 개인 프로젝트 올리기 과정
- 깃허브에서 새로운 repository 생성
- 작업 프로젝트의 터미널에서 본인 깃허브의 정보로 로그인
$git config --global user.name "이름"
$git config --global user.email "이메일" - $git init
- $git add .
- $git status
- $git commit -m "커밋 내용"
- $git remote add origin [생성한 깃허브 레파지토리의 url]
- $git push -u origin master
- $git pull origin master : 누군가 코드를 업데이트했거나 변경사항이 생겨서 그 내용을 받아와야할 때 (pull은 fetch와 merge 작업 둘다 수행 효과)
팀원들과 fork 를 이용하여 협업하기 과정
- 우선 중앙 원격 저장소를 fork하여 내 깃허브 저장소로 저장
- $git clone [내 깃허브에 저장된 저장소의 url] : 내 로컬 저장소인 컴퓨터에 다운받기
- $git remote -v : 현재 상태를 파악하기
- $git remote add upstream [fork한 중앙원격저장소의 url] : 중앙원격저장소와 연결되어 수정되면 바로 받아올 수 있음 -->삭제하고 싶으면 $git remote remove upstream
- $git fetch upstream : 이 명령어 입력 시 출력되는 branch 이름이 바로 업데이트되는 내용이 담기는 branch
- $git checkout [이동하려는 branch 이름] : 다른 branch로 이동
- $git merge [합병하고자 하는 branch 이름] : master branch에서 다른 브랜치 작업과 합병할려면, master branch로 이동 후 이 명령어 입력
- 내 깃허브 저장소에도 업데이트된 내용 반영하고 싶으면 $git push
- $git branch [새로운 branch 이름] : 새로운 branch 생성
- $git add 및 $git commit -m "커밋 내용"
- $git push origin [올리고자 하는 branch 이름] : 내 원격저장소에 올리기
- 프로젝트 관리자에게 검토하고 merge 해달라는 초록색 pull request 버튼 누르고 해당 branch 선택
- 반복 과정~~
팀원들과 하나의 원격저장소에서 각자 브랜치를 생성하며 작업하는 과정
- $git clone [내 깃허브에 저장된 저장소의 url] : 내 로컬 저장소인 컴퓨터에 다운받기
- $git branch [새로운 브랜치 이름] : 새로운 브랜치를 파서 로컬에서 작업
- $git add 및 $git commit -m "커밋 내용"
- $git push origin [올리고자 하는 브랜치 이름] : 원격저장소에 내가 작업한 브랜치 올림
- 깃허브 페이지에서 compare&pull request 를 클릭하여 풀리퀘스트 생성
- 충돌이 나지 않는다면 master 브랜치에 merge 수행 , 충돌이 발생한다면 해결 후에 다시 merge
- 그 후 master 브랜치가 변경되었다면 내 브랜치에 pull 받기 $git pull origin master
- 다시 내 로컬 브랜치에서 작업 시작하며 반복
- 다만 작업 중간에 팀원이 수정해서 변경내용을 받아와야 한다면 현재 진행 중인 작업을 add 및 commit 한 후에, master 브랜치 내용을 내 브랜치에 pull 받기 $git pull origin master
- 충돌나는 사항 있으면 잘 살펴보고 수정한 후 다시 commit 하고 모든 커밋들 push
- compare&pull request -> merge 등 반복 (merge 할때는 꼼꼼하게 검토할 것)
*추가로 다른 팀원의 브랜치 가져오고 싶을 때
$git checkout -t origin/[브랜치 이름] : 원격저장소에 있는 branch를 내 로컬 저장소로 가져오기
[References]
커밋 강제 삭제 oen-blog.tistory.com/107