커밋을 관리해요 😊
간단한 것도 가끔 기억이 잘 나지 않아서 글로 정리해봅니다.
명령어를 통해 커밋된 내역을 확인합니다.
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 커밋을 관리하는 중 실수가 있거나 의도한 대로 되지 않았을 경우 되돌릴 수 있습니다.
git reset
staging
된 파일들을 unstaged
로 되돌립니다.
git reset { fileName }
staging
된 특정 파일을 unstaged
로 되돌립니다.
git reset { commitHash }
특정 커밋으로 돌아가며 돌아간 커밋 이후의 수정 내역은 unstaged
상태가 됩니다.
특정한 commitHash
대신 HEAD~1
, HEAD~2
와 같이 현재 HEAD 기준 이전으로 돌아갈 수 있습니다.
git reset --soft { commitHash }
특정 커밋으로 돌아가며 돌아간 커밋 이후의 수정 내역은 staged
상태로 유지됩니다.
git reset --hard { commitHash }
특정 커밋으로 돌아가며 돌아간 커밋 이후의 수정 내역은 지워집니다.
원격 저장소에 이력이 없다면 슬픈 기억이 하나 추가될 수 있습니다.
reset
되돌리고 그 이후 기록이 지워집니다.
실수한 부분을 깔끔하게 지우고 싶은 경우
revert
되돌리고 되돌렸다는 이력을 남깁니다.
어떤 부분이 수정됐는지 나중에 확인이 필요한 경우
일반적으로 커밋들은 위의 명령어로 관리가 가능하지만
최초 커밋의 경우는 다릅니다.
git update-ref -d HEAD
update-ref
란commit
을 가리키는 해시 값을ref
라는 용어로 사용한 것이다.
즉, 해시 값(ref)을 업데이트하는 것이다.
-d
옵션은 당연히 지우는 것이다.
HEAD
가 가리키는 해시 값을 지움으로써, 그냥 아예 첫 커밋을 초기화해버리는 것이다.
jakeseo_me/git-첫번째-커밋-취소하기
저는 그냥 되니까 사용하는 경우가 많은데 이렇게 풀어서 설명해주시는 분이 계셔서 정말 감사합니다.
최초 커밋 되돌리기를 찾아보면 함께 사용되는 명령어가 있습니다.
상황에 맞게 사용할 수 있겠습니다.
git rm --cached -r .
--cached
옵션은 원격 저장소에서만 삭제할 때 사용합니다.
git rm -r .
원격 저장소와 로컬 저장소에서 삭제합니다.
package-lock.json
파일은 npm을 통해 패키지를 설치할 때, package.json
의 수정이 발생할 때 생성되며 수정됩니다.
프로젝트를 생성하고 환경을 구성하면서 node_modules
내에 설치되는 패키지들의 의존성을 기록합니다.
package
와 package-lock
이름에서 더 정확한 정보를 기록하지 않을까 유추해봤습니다.
버전 정보를 저장할 때 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
때문에 패키지 업데이트 관련해서 어려움을 겪는 경우도 있었는데
상황에 따라 기록하거나 삭제하면 좋을 것 같습니다.