커밋 관리 feat. package-lock

NINE9·2023년 4월 14일
0

커밋을 관리해요 😊
간단한 것도 가끔 기억이 잘 나지 않아서 글로 정리해봅니다.

📌커밋 내역

기본

명령어를 통해 커밋된 내역을 확인합니다.

git log
User System ~/project (master)
$ git log
commit commitHash (HEAD -> master)
Author: userName <userEmail>
Date:   Day of the week Mon Day HH:MM:SS Year [Time Diff]

    first commit

commit commitHash
Author: userName <userEmail>
Date:   Day of the week Mon Day HH:MM:SS Year [Time Diff]

    Init

간략

--oneline 옵션과 함께 커밋 정보를 간략히 확인합니다.

$ git log와 함께 사용되는 옵션은 많습니다. 현재는 커밋을 관리하는 내용이므로 다른 글에서 다루겠습니다.

git log --oneline
User System ~/project (master)
$ git log --oneline
commit commitHash (HEAD -> master)
commit commitHash

📌커밋 되돌리기

Git 커밋을 관리하는 중 실수가 있거나 의도한 대로 되지 않았을 경우 되돌릴 수 있습니다.

reset

git reset

staging 된 파일들을 unstaged로 되돌립니다.

git reset { fileName }

staging 된 특정 파일을 unstaged로 되돌립니다.

git reset { commitHash }

특정 커밋으로 돌아가며 돌아간 커밋 이후의 수정 내역은 unstaged 상태가 됩니다.
특정한 commitHash 대신 HEAD~1, HEAD~2와 같이 현재 HEAD 기준 이전으로 돌아갈 수 있습니다.

Soft reset

git reset --soft { commitHash }

특정 커밋으로 돌아가며 돌아간 커밋 이후의 수정 내역은 staged 상태로 유지됩니다.

⚠️Hard reset

git reset --hard { commitHash }

특정 커밋으로 돌아가며 돌아간 커밋 이후의 수정 내역은 지워집니다.
원격 저장소에 이력이 없다면 슬픈 기억이 하나 추가될 수 있습니다.

reset? revert?

  • reset 되돌리고 그 이후 기록이 지워집니다.
    실수한 부분을 깔끔하게 지우고 싶은 경우

  • revert 되돌리고 되돌렸다는 이력을 남깁니다.
    어떤 부분이 수정됐는지 나중에 확인이 필요한 경우

최초 커밋 되돌리기

일반적으로 커밋들은 위의 명령어로 관리가 가능하지만
최초 커밋의 경우는 다릅니다.

git update-ref -d HEAD

update-refcommit을 가리키는 해시 값을 ref라는 용어로 사용한 것이다.
즉, 해시 값(ref)을 업데이트하는 것이다.
-d 옵션은 당연히 지우는 것이다.
HEAD가 가리키는 해시 값을 지움으로써, 그냥 아예 첫 커밋을 초기화해버리는 것이다.
jakeseo_me/git-첫번째-커밋-취소하기

저는 그냥 되니까 사용하는 경우가 많은데 이렇게 풀어서 설명해주시는 분이 계셔서 정말 감사합니다.

최초 커밋 되돌리기를 찾아보면 함께 사용되는 명령어가 있습니다.
상황에 맞게 사용할 수 있겠습니다.

git rm --cached -r .

--cached 옵션은 원격 저장소에서만 삭제할 때 사용합니다.

git rm -r .

원격 저장소와 로컬 저장소에서 삭제합니다.


📌package-lock

이게 뭐지?

package-lock.json 파일은 npm을 통해 패키지를 설치할 때, package.json 의 수정이 발생할 때 생성되며 수정됩니다.
프로젝트를 생성하고 환경을 구성하면서 node_modules 내에 설치되는 패키지들의 의존성을 기록합니다.

왜 필요하지?

packagepackage-lock 이름에서 더 정확한 정보를 기록하지 않을까 유추해봤습니다.

package.json

버전 정보를 저장할 때 version range를 사용합니다.

ex) ^7.12.16, ~5.0.0 특정 버전을 정확히 지정하는 것이 아닌 범위를 의미합니다.

  • >version, >=version, <version, <=version - 부등호에 맞게 이해하면 된다.
  • ~version - 명시된 버전과 근사한 버전
  • ^version - 명시한 버전과 호환되는 것
  • 1.2.x - 1.2.0, 1.2.1, 1.2.2 ...
  • * - 모든 버전
  • "" - *과 같다.
    .
    .
    등등 더 있지만 한 번 더 자세히 정리할 때 다루고 여기선 줄이겠습니다.

package-lock.json

설치했었던 패키지 버전을 범위가 아닌 당시 설치된 의존성을 그대로 기록합니다.

다른 시스템 환경에서 프로젝트를 다룰 때 패키지 버전이 맞지 않는다거나
마이그레이션 작업 시 시간을 많이 허비하는 경우가 있는데 이런 수고를 덜기 위해선 필요하지 않을까 생각합니다.

오히려 package-lock 때문에 패키지 업데이트 관련해서 어려움을 겪는 경우도 있었는데
상황에 따라 기록하거나 삭제하면 좋을 것 같습니다.

profile
시각적 개발자 😉

0개의 댓글