Staged와 UnStaged 상태의 변경 내용을 확인하면서 시작한다.
단순히 파일이 변경됐다는 사실이 아니라 어떤 내용이 변경됐는지 살펴보려면 git status 명령이 아닌 git diff명령을 사용해야 한다.
이 명령은 워킹 디렉터리에 있는 것과 현재 버전 = Staging Area에 있는 것을 비교한다. 그래서 수정하고 아직 stage하지 않은 것과의 차이를 볼 수 있는 것이다.
만약에 커밋하려고 Staging Area에 넣은 파일 부분의 변경 부분을 보고 싶다면 --staged옵션을 사용한다. 커밋된 것과 Staging Area에 있는 것을 비교한다.
git diff 명령은 마지막으로 커밋한 후에 수정한 것들을 전부 보여주지 않고 Unstaged 상태인 것들만 보여준다.
이 말은 즉 Staging Area에 넣었다면 아무것도 출력하지 않는다는 것이다.
README파일을 Stage 한 후에 다시 수정해도 git diff를 사용할 수 있는데 이때는 staged 된 상태와 Unstaged 된 상태를 비교해 출력해 준다.
변경사항을 커밋하자.
수정한 것을 커밋하기 위해 git add를 통해 Staging Area에 파일을 정리했다. Unstaged 상태의 파일은 커밋되지 않는다는 것 기억하자. 수정을 했다고 해도 add를 하지 않으면 Modified상태로 남아 있는 것뿐이다. 따라서 커밋 전 git status를 통해 확인할 수 있다.
자주 쓰일 수도 있는데 Staging Area를 생략하는 방법이다.
Staging Area는 커밋할 파일을 정리한다는 점에서 안정장치가 될 수 있지만 필요하지 않을 때도 있다.
이때 git add -a옵션을 추가하면 추적 상태의 파일을 자동으로 Staging Area에 넣는다. 그래서 git add로 추가하지 않아도 된다.
아직 staging Area에 들어가지 않은 파일이 보인다. git add로 추가하지 말고 바로 커밋해보자.
git commit -a -m "-a options"
다만 이 옵션을 사용할 때는 신중해야 한다. 추가하지 말아야 할 변경사항도 추가될 수 있다.
다음은 파일을 삭제할 것이다.
git rm 명령을 통해 추적 상태의 파일을 삭제한 후에 커밋해야 한다. 이 명령은 실제 디렉터리에 있는 파일도 삭제한다.
여기서 git rm을 통해 파일을 삭제하도록 명령했다면 그 행위는 바로 Staging Area에 올라간다. commit만 하면 된다.
커밋하면 파일이 삭제되고 git은 더 이상 해당 파일을 추적하지 않는다.
또한 git이 추적하지 않게 할 수 있는데 이 경우는. gitignore파일에 실수로 넣지 못했거나, 대용량 로그파일 같은 것을 실수로 추가했을 경우 사용한다.
Staging Area에서만 제거하고 워킹 디렉터리에 있는 해당 파일은 삭제되지 않는다.
git rm --cached fileName
여러 개 파일과 디렉터리를 삭제하는 방법은 파일명 확장 기능을 이용하면 된다.
ex git rm log/\*. log log디렉터리에 존재하는. log로 끝나는 모든 파일을 Staging Area에서 제거한다.
파일 이름을 변경하는 명령어
단축 명령어인 git mv file_from file_to이다. 다른 도구를 사용했을 경우 꼭 rm으로 제거하고 다시 add 해야 한다. vm은 이걸 합친 명령어다.
커밋 기록 조회하기
git 공식홈페이지에서 예제를 clone 해서 기록을 조회해 본다.
가장 최근 커밋 된 순서로 보인다. 그다음 체크섬, 저자 이름, 이메일, 날자, 커밋 메시지를 볼 수 있다.
자주 사용되는 옵션을 나열한다.
-p경우 diff결과를 보여준다.
-2는 최근 커밋2개만 보여준다.
--stat옵션은 어떤 파일이 수정됐고 얼마나 많은 파일이 변경됐는지 , 얼마나 많은 라인이 추가됐는지 보여준다.
--pretty 옵션은 이쁘게 보여준다. 여러 arg가 존재한다. 이중 format 옵션인데 결과를 다른 프로그램으로 파싱 하고자 할 때 유용하다.
해당 옵션들은 공식홈페이지를 찾아보자.
되돌리기
되돌리는 방법을 알아 본다. 되돌리면 복구할 수 없다. git은 실수는 복구가 되지만 의지를 가지고 Undo 한 것은 복구할 수 없다.
만약 완전히 종료한 커밋에 어떤 파일을 빼먹었거나 커밋 메시지를 잘못 적을 때사용하는 명령어가 있다.
git commit --amend
만약 커밋한 후 수정한 것이 없다면 커밋 메시지만 변경된다. 이것은 이전 커밋을 현재 커밋으로 덮어쓰는 걸 의미한다.
Staging Area와 워킹 디렉토리 사이를 넘나들어보자, 두 영역의 상태를 확인할 때마다 변경된 상태를 되돌리는 방법을 알려주기에 매우 편하다. 예를 들어 따로따로 커밋해야 할 두 개의 파일이 있는데 git add *로 전부 staged상태에 들어갔다. 어떻게 되돌리면 될까?
git reset HEAD FILE_NAME
명령어를 이용하자.
*reset명령어는 매우 위험하다. --hard옵션과 함께라면, 다만 옵션없이 사용하면 워킹 디렉터리 파일은 건드리지 않는다.
나중에 좀더 자세히 다루겠다.
Modified 파일 되돌리기
뭐 많이 사용할 수도 있다. 최근 커밋된 버전으로 혹은 처음 clone 했을 때처럼 그 내용으로 되돌리는 방법이 있다.
git checkout --FileName
이 명령은 원래 파일로 덮어쓴다. 변경한 내용을 쉽게 버릴 수는 없고 하지만 당장은 되돌려야 하는 상황이면 stash와 branch를 사용하자!
중요한 것은 git으로 commit한 것은 모두 복구할 수 있다. 이 말은 역도 성립한다는 점 알아둬야 한다.
'Git' 카테고리의 다른 글
Git Branch (0) | 2021.02.11 |
---|---|
Git 기초 명령어(3) (0) | 2021.02.10 |
Git 기초 명령어 (0) | 2021.02.10 |
Git 설치 (0) | 2021.02.10 |
Git 기초 (0) | 2021.02.10 |
댓글