깃/깃허브 구분
👉 git : 버전 컨트롤 시스템(version control system)
👉 Github : 원격 저장소(remote repository)
소스 코드 오류가 발생한다면 오류가 발생하기 전으로 되돌아가게해주는 소스 코드 버전 관리 시스템이 바로 git입니다
내가 원하는 시점마다 깃발을 꽂고 깃발이 꽂힌 시점으로 자유롭게 이동하여 새로운 소스코드를 추가하거나 삭제 할 수 있게 해준다. 오류가 일어나도 바로 전에 꽂은 깃발 시점으로 돌아가면 되므로 굉장히 유용하다.
이렇게 git으로 관리하는 프로젝트를 올려둘 수 있는 대표적인 git 호스팅 사이트 중 하나가 바로 GitHub입니다.
git 호스팅 사이트에는 GitHub외에도 GitLab, BitButcket 등 여러 사이트가 있습니다
특히 GitLab의 경우 NASA, Sony 등 10만개 이상의 조직이 사용하고 있다. GitLab프로젝트 자체가 오픈소스여서 직접 서비스 발전에 기여할 수도 있습니다
깃허브 활용
$ git add (파일명) // 특정 파일 Index(Staging area)에 추가
$ git add . // 현재 및 하위 디렉토리 모든 파일 index 추가
$ git commit -m "(설명)" // local repository에 추가
$ git push origin master // remote repository에 추가
$ git remote -v
$ git remote add (이름) (url) // 원격저장소 추가
git init 이후 github에서 리포지토리 만든 후 원격저장소 연결
$ git remote add origin [REPOSITORY ADDRESS]
//가장 마지막 커밋을 수정한다
git commit --amend -m "(설명)"
git commit --amend --no-edit //--no-edit 옵션은 설명 수정하지 않을 때
$ git log
$ git commit --amend
$ git add [빠뜨린 파일]
$ git commit --amend --no-edit
//이렇게 하면 빠뜨린 파일이 같이 커밋 된다.
$ git --version
$ git status
🟥빨간색 => add 안된 상태
🟩초록색 => add 된 상태
$ git branch (브랜치명) // 브랜치만 생성
$ git checkout (브랜치명) // 해당 브랜치로 이동
$ git checkout -b (브랜치명) // 현재 커밋에서 브랜치 생성하고 이동
$ git checkout (커밋아이디) -b (브랜치명) //해당 커밋으로 이동 후 브랜치 생성
$ git checkout master
$ git branch //local
$ git branch -a //remote까지 확인
원격브랜치는 다음 명령어로도 확인 가능
git ls-remote origin
$ git branch -d (브랜치명) //로컬 저장소에서 브랜치 삭제
$ git push origin --delete (브랜치명) //원격저장소에서도 삭제
git branch -m main master
git fetch origin
git branch -u origin/master master
git remote set-head origin -a
다른 커밋 보기로 커밋 이력은 그대로 있는 상태에서 현재 보는 시점을 변경.
$ git checkout (커밋아이디) // 커밋아이디는 git log로 확인
$ git checkout master // 최근 커밋 상태로 돌아오기
$ git checkout (브랜치명) // 해당 브랜치로 이동
로컬저장소에서 이전 커밋으로 돌아가고 이후 커밋은 add는 안 한 상태(unstage)로 만들기.
워크 스페이스에 작업하던 내용은 그대로 있음.
$ git reset (커밋 아이디)
$ git reset HEAD^ //한 커밋 이전
$ git reset HEAD^^ //두 커밋 이전
$ git reset HEAD^^^ //세 커밋 이전
이전 커밋으로 돌아가면서 이후 커밋 삭제
$ git reset --hard (커밋 아이디)
$ git reset --hard HEAD^^
이후 원격 저장소에는 삭제가 반영되지 않은 상태이므로 강제 커밋
$ git push origin master --force
checkout은 커밋은 그래로 두고 HEAD(시점)만 이동하고, reset은 삭제까지 한다는 차이가 있음.
reset 대신 revert를 사용할 수 있는데, revert는 기준 커밋 이후로 삭제하는 것이 아니라 현재까지의 이력을 남겨두고 과거 커밋으로 재수정해 커밋한 효과임.
$ git revert (커밋아이디)
checkout으로 다른 브랜치로 이동할 때 commit을 하라는 메시지가 나올 때가 있다. commit을 하고 싶지 않다면 stash를 이용한다.
$ git stash
stash를 하면 임시 저장소에 수정 파일이 저장된다.
꺼낼 때는
$ git stash list
작업하던 브랜치로 돌아와서 수정했던 내역을 stash에서 다시 가져올 때는
$ git stash apply // 최근 stash 가져오기
$ git stash apply [stash 항목] // stash list 중 특정 항목에서 가져오기
$ git rm (파일명)
$ git rm (파일명) --cached
$ git rm -r (폴더) --cached
--cached는 리모트로 이미 push까지 했을 경우 붙이는 옵션
이후 commit하고 push 다시 해주면 remote에 반영됨
.gitignore파일을 생성해 git에 추가하고 싶지 않은 파일이나 폴더 리스트를 입력
.gitignore 파일 목록 검색
$ git ls-files -o -i --exclude-standard
-o : untracked files
-m : modified files
-d : deleted files
-c : cached files
-i : ignored files
--exclude-standard : .gitignore
$ git pull origin master
$ git clone (url) (저장할 폴더 이름)
$ git fetch origin
master 브랜치 또는 원하는 브랜치로 이동 후 병합하고자 하는 브랜치를 병합
$ git checkout master
$ git merge (브랜치명)
$ git checkout (바뀔 브랜치)
$ git reset --hard (타깃 브랜치)
유익한 글이었습니다.