git branch [hash]
와 git reset --hard
차이?<aside> 📌
요약: git은 working directory, staging area, repository로 구역을 구분한다. git add 명령어를 통해서 working directory → staging area로, git commit 명령어를 통해서 staging area → repository로 이동시킨다. 저장소는 git init 명령어로 생성하며 현재 디렉토리를 git repository로 설정하는 것이다. 즉, 이 디렉토리에 있는 파일들은 감시하고 추적하겠다는 뜻이다. git log는 commit history를 확인하는 명령어이고, git status는 현재 staging file들의 상태를 확인하는 명령어다. git branch를 통해서 main branch는 안정적으로 작업을 하고(상시 배포가 가능하도록 최대한 직접 수정을 하지 않는다.) 기능 추가나 작업단위로 topic branch를 여러개 만들어 따로 개발을 한다. 후에 git merge 작업을 통하여 병합할 수 있다. 이 때 conflict를 잘 해결해야 한다. conflict이 발생한다면 git status로 충돌한 파일을 확인하고 파일을 열어 중복되는 코드를 수정해주어야 한다. 이후 그 파일을 git add와 git commit으로 커밋해주고 다시 병합해야 한다. 보통 이렇게 merge 한 후 껍질만 남은 토픽 브랜치는 삭제한다. git clone을 통해서 git repository를 복사할 수 있으며 git remote를 통해서 원격저장소를 확인할 수 있다. 저장소에서 데이터를 가져와 로컬 데이터와 병합하는것을 git pull로 진행한다. 이 중 병합을 제외하는 것은 git fetch이고 이를 위해서 git log 명령어로 변경된 파일을 확인한다. git push를 통해서 원격 저장소에 변경사항을 전달할 수 있는데, 다른 사용자가 이미 commit을 했다면 이를 먼저 pull 하고 나서 push 해야한다.
</aside>