Git

Yongjun Park·2022년 9월 15일
0

2022 OSAM 해커톤

목록 보기
10/11

2022 OSAM 해커톤 사전 온라인 교육에서 배운 내용입니다.
모르는 내용만 발췌하여 정리한 것이기 때문에 내용의 연결성이 부족한 점 양해 부탁드립니다.

상황 1. 기본

git init
git status
git add .
git commit -m "commit msg"
git branch -m main # 현 브랜치의 이름을 main으로 변경
git remote add origin https://github.com/yoopark/test.git
git push -u origin main # 앞으로는 git push만 해도 git push origin main 됨

Username: yoopark
Password: [Personal access token]

상황 2. 브랜치 파고 Github에 올리기

git branch issue1
git checkout issue1
git branch -v # branch 종류 확인
git checkout issue1

# 열심히 기능 추가

git add .
git commit -m "Revise: README"
# Github(원격 저장소)에도 issue1 이름의 브랜치를 만들어야 함. 
git push origin issue1

상황 3. 브랜치 병합하기

# 원 브랜치와 곁 브랜치 모두 변경사항이 커밋 완료되어있어야 함.

# main <- issue1
git checkout main
git merge issue1

Auto-merge(3-way merge)를 수행한다.

하지만 Conflict가 발생하면, 아래 파일처럼 나타난다.

# HELLO WORLD!

<<<<<<< HEAD
Think Different!
=======
Long time no see~ 
>>>>>>> issue1

일일이 올바르게 수정해주고 커밋하도록 하자.

git log --graph --oneline

상황 4. 실수를 해서 되돌려야 한다면

💡 이 상황이 오고야 말았다. 당황한 나머지 git reset --hard을 무작정 저지르고 git push -f 로 Github까지 망쳐놓는다면… 적어도 이런 바보짓은 하지 말아야 한다. git reset은 되돌렸다는 커밋도 안 남긴 채로 과거로 돌아가는 것이기 때문에, 특히 팀 개발에서 매우 위험하다.

git reset이 얼마나 무서운 놈이냐?

git reset --soft [commit id] 
git reset --mixed [commit id]
git reset --hard [commit id]
  • soft : 차이가 있는 부분을, commit 이전 상태로 되돌림. (staging area)
  • mixed(default) : 차이가 있는 부분을, add 이전 상태로 되돌림. (working directory)
  • hard : 차이가 있는 부분을, 삭제함.
git reset HEAD~10
git reset HEAD^
  • HEAD~10 : 최근 10개 커밋 되돌림.
  • HEAD^ : 직전 커밋 되돌림.

git revert [commit id]

A→B→C→D 순으로 커밋이 된 상황(HEAD = D)에서
만약 B 상황으로 되돌리고 싶을 때, 바로 B로 revert하면 안 된다.

git revert는 해당 커밋에서 변화시킨 일만 되돌리기 때문에,
git revert HEAD 를 3번 실행하여 되돌아가는 것이 적절하다.

💡 git reset은 어떤 커밋으로 되돌아가고 싶은지를 말하기 때문에 HEAD^ 를 사용하지만,
git revert는 어떤 커밋에서 되돌아가고 싶은지를 말하기 때문에 HEAD를 사용한다.

  • git revert --no-edit을 쓰면 커밋 메시지를 따로 수정하지 않아도 된다.
  • 원래는 커밋 메시지를 자유롭게 수정할 수 있도록 Vim 창이 등장한다. ESC + :wq로 꺼주도록 하자.
profile
추상화되었던 기술을 밑단까지 이해했을 때의 쾌감을 잊지 못합니다

0개의 댓글