Github

상황별 Git 명령어(협업)

yoonstar* 2021. 2. 9. 23:21

기본적인 명령어

.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 : 로컬 브랜치 정보 조회


깃허브에 개인 프로젝트 올리기 과정

  1. 깃허브에서 새로운 repository 생성
  2. 작업 프로젝트의 터미널에서 본인 깃허브의 정보로 로그인
    $git config --global user.name "이름"
    $git config --global user.email "이메일"
  3. $git init
  4. $git add .
  5. $git status
  6. $git commit -m "커밋 내용"
  7. $git remote add origin [생성한 깃허브 레파지토리의 url]
  8. $git push -u origin master 
  9. $git pull origin master : 누군가 코드를 업데이트했거나 변경사항이 생겨서 그 내용을 받아와야할 때 (pull은 fetch와 merge 작업 둘다 수행 효과)

팀원들과 fork 를 이용하여 협업하기 과정

  1. 우선 중앙 원격 저장소를 fork하여 내 깃허브 저장소로 저장
  2. $git clone [내 깃허브에 저장된 저장소의 url] : 내 로컬 저장소인 컴퓨터에 다운받기
  3. $git remote -v : 현재 상태를 파악하기
  4. $git remote add upstream [fork한 중앙원격저장소의 url] : 중앙원격저장소와 연결되어 수정되면 바로 받아올 수 있음 -->삭제하고 싶으면 $git remote remove upstream
  5. $git fetch upstream : 이 명령어 입력 시 출력되는 branch 이름이 바로 업데이트되는 내용이 담기는 branch
  6. $git checkout [이동하려는 branch 이름] : 다른 branch로 이동
  7. $git merge [합병하고자 하는 branch 이름] : master branch에서 다른 브랜치 작업과 합병할려면, master branch로 이동 후 이 명령어 입력
  8. 내 깃허브 저장소에도 업데이트된 내용 반영하고 싶으면 $git push
  9. $git branch [새로운 branch 이름] : 새로운 branch 생성
  10. $git add 및 $git commit -m "커밋 내용"
  11. $git push origin [올리고자 하는 branch 이름] : 내 원격저장소에 올리기
  12. 프로젝트 관리자에게 검토하고 merge 해달라는 초록색 pull request 버튼 누르고 해당 branch 선택
  13. 반복 과정~~

팀원들과 하나의 원격저장소에서 각자 브랜치를 생성하며 작업하는 과정

  1. $git clone [내 깃허브에 저장된 저장소의 url] : 내 로컬 저장소인 컴퓨터에 다운받기
  2. $git branch [새로운 브랜치 이름] : 새로운 브랜치를 파서 로컬에서 작업
  3. $git add 및 $git commit -m "커밋 내용"
  4. $git push origin [올리고자 하는 브랜치 이름] : 원격저장소에 내가 작업한 브랜치 올림
  5. 깃허브 페이지에서 compare&pull request 를 클릭하여 풀리퀘스트 생성
  6. 충돌이 나지 않는다면 master 브랜치에 merge 수행 , 충돌이 발생한다면 해결 후에 다시 merge
  7. 그 후 master 브랜치가 변경되었다면 내 브랜치에 pull 받기 $git pull origin master
  8. 다시 내 로컬 브랜치에서 작업 시작하며 반복
  9. 다만 작업 중간에 팀원이 수정해서 변경내용을 받아와야 한다면 현재 진행 중인 작업을 add 및 commit 한 후에, master 브랜치 내용을 내 브랜치에 pull 받기 $git pull origin master
  10. 충돌나는 사항 있으면 잘 살펴보고 수정한 후 다시 commit 하고 모든 커밋들 push
  11. compare&pull request -> merge 등 반복 (merge 할때는 꼼꼼하게 검토할 것)

*추가로 다른 팀원의 브랜치 가져오고 싶을 때

$git checkout -t origin/[브랜치 이름] : 원격저장소에 있는 branch를 내 로컬 저장소로 가져오기


[References]

커밋 강제 삭제 oen-blog.tistory.com/107

브랜치 정보 가져오기 velog.io/@juno7803/git-%EC%9B%90%EA%B2%A9-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0remote-branch