국비교육 과정 중 미니프로젝트를 할 때 Git과 GitHub를 사용하여 버전 관리를 했다. 처음으로 프로젝트를 해봤지만 명령프롬프트에서 Git을 사용하다보니 발생했던 문제를 쉽게 해결할 수 있었다. 프로젝트를 하면서 어떤 상황이 있었고 어떻게 해결했는지 정리하려고 한다.
Git은 명령프롬프트를 통해 사용했는데 cd 프로젝트 디렉토리
를 입력하여 현재 위치를 이동시킨 후에 아래의 명령어를 입력해야 한다. 프로젝트에서 브랜치는 나누지 않았고 모두 main 브랜치를 이용했다.
팀원 중 누군가가 작업을 완료하여 push 했다면 해당 커밋이 최신 커밋이 된다. 커밋을 pull 받아서 커밋을 최신으로 유지하려고 할 때 같은 브랜치에서 작업을 하고 있었다면 나의 작업 내용을 잃을 수도 있다. 그래서 pull을 받기전에 나의 작업내용을 저장하는 것이 좋다.
해결방법
git stash
를 입력하여 현재 작업 내용을 저장한다git pull
를 입력하여 다른 사람의 커밋을 pull 받는다git stash pop
으로 저장한 작업 내용을 불러온다다른사람이 push한 것을 모르고 push를 할 수 있다. 이때 커밋까지는 수행되지만 push가 정상적으로 이루어지지 않는다.
해결방법
git reset HEAD~1
을 입력하여 가장 최신 커밋 1개를 삭제한다git stash
를 입력하여 작업 내용을 저장한다git pull
를 입력하여 다른 사람이 푸시한 최신 커밋을 풀 받는다git stash pop
으로 저장한 작업내용을 불러온다git add -A
git commit -m "Commit Message"
git push origin main
으로 나의 작업 내용을 푸시한다4번의 과정에서 Unmerged...
가 표시될 수 있다. 해당 파일을 보면 pull을 받은 파일에 있던 내용과 stash로 임시 저장 되어있던 내용이 모두 있으므로 둘 중 하나를 지우거나 두개의 내용을 합쳐서 수정하면 된다.
Push를 하고 난 후에 잘못했다는 것을 알았을 때 해당 커밋을 삭제할 수 있다. 이것은 잘못된 커밋을 pull 받아서 삭제하려는 경우에도 똑같이 적용할 수 있다.
커밋을 삭제하지 않고 수정하여 다시 push할 수도 있겠지만 작업내역을 깔끔하게 하기 위해 삭제 했었다. 이때 필요한 모든 파일은 이전 커밋에 존재한다고 가정한다.
해결방법
git reset HEAD~1
을 입력하여 가장 최신 커밋 1개를 삭제한다git reset --hard
를 입력하여 이전 커밋을 기준으로 파일을 변경한다git clean -fd
를 입력하여 이전 커밋에 존재하지 않았던 파일을 삭제한다git push origin +main
으로 현재 상태를 강제 push하여 GitHub에서 표시되었던 최신 커밋을 삭제한다1번에서 삭제할 커밋이 여러개라면 그 개수를 1 대신 입력하면 된다.
여러명이 함께 프로젝트를 하다보니 충돌이 발생하는 경우가 많았다. 브랜치를 나눠서 작업했다면 작업 공간이 나눠져 충돌을 줄일 수 있었을 것이다.
Git이 처음에는 복잡하게 느껴질 수 있지만 파일의 버전 관리를 하는데 유용하고 깃크라켄이나 소스트리 등의 프로그램을 사용하면 훨씬 편리하게 이용할 수 있다.