본문 바로가기
목차
[TIL]내 머릿속의 코드

[TIL:20240227]아는데 모르는 Git(2)

by 졸린부엉이 2024. 2. 27.
git의 원리와 상태에 대해 정리해 보았다.
 아는데 모르는 Git(1)

 

여기서는! 

  • Commit, reset

그리고 마무리로 명령어를 살펴보자!!

찬찬히 순서대로 해보자.

나는 vscode 에디터 툴을 사용한다.

 

 


 

git은 각각의 폴더로 저장하고 기록 할수있어! 우선 저장소를 만들자  

git 저장소를 만들려면 원하는 폴더에 들어가서 명령을 내리면 된다.

아마도  '$'모양이 코드를 적으려는 커서 앞에 보이면 글씨만 작성하면 된다.

$ git init

 

 

 

그러면 이렇게 폴더에

로컬저장소가 생긴다.

저 숨겨진 폴더가 part1의 저장소이다!

 

파일을 생성해본다.

파일을 생성만 하면(Untracked 상태) 이다

 

 

 


 

 

'git 어서 나를 추척해서 관리해줘' 라고 git에게 말하자

git add를 하기 전에.

우선 .gitignore 파일을 알아야 한다.

왜나면. 원격저장소(서버저장소)에 남기 떄문이다.

 

간단한 예시를 들자면.

나만 보고 싶은 파일이 있다고 가정해보자.
그런데 내가 commit하고 push(업로드)해서 원격저장소에 올렸다.
나중에 알고 삭제하려고 하는데, 이미 많은 사람들이 pull(다운)을 받았다면?
그러면 그 pull을 받은 사람들을 다 그 파일을 다 삭제해야하고, 다같이 올리게 되면 충돌이 나면서 난리가 나며,
나만 보고 싶은 파일을 이제 다 ~~ 알려진것이다... 경험담은 아니다..

 

비슷하게 퍼블 신입때,

git관리를 하기 위해서 불필요한 파일들이 원격저장소에 올라가면 안되는데,

.gitignore 를 몰랐어서 몇개가 올라가서 혼난적이 있다.

 

이처럼 

.gitignore 추적을 받지 않았으면 하는 파일을 적어 놓으면 된다. 

 

 

 

이제 추적 해달라고 말하자. 그리고 명령어도 조심해야한다.

$ git add . // .gitignore에 적힌 파인은 저장안됨
$ git add * // .gitignore있던 말던 그냥 다 저장된다

$ git add <파일이름> 
$ git add file.txt //파일 이름을 적으면 여러개를 수정했어도 file.txt만 저장

 


git add 취소법

$ git reset // 이렇게 적으면 staging arear 에 올린것을 취소할수 있다​

 

 'git add' 를 했으면 이제 Commit으로 기록을 남기자  

내 컴퓨터의 레지스터(저장소)에 기록을 남겨보자

$ git commit -m '메세지 내용' // 간단히 적을때
$ git commit -m 'initial project version'

$ git commit // 많은 내용을 적을때 에디터가 나옴

git commit 명령어를 입력하면 보이는 에디터이다. 여기에 여러 정보 입력이 가능하다

 

 

 

 

 

기록이 되었는지 확인해 보자~

commit 기록을 보자. 나는 4번의 commit을 한 상태다.

$ git log
git log는 나의 기록을 보는 명령이다. 원래는 여러줄로 나오는데,
git log --pretty=oneline 하면 한 줄로 볼수 있다.

 


 

 

 

4번째. par1 파일 수정.... 
3번째. 라인 삭제 
2번쨰. reademe 정보 추가
1번째. first commit 

 

 

 

 


 

 

 

 

잠깐 Commit의 HEAD?! 이거 알고가야해  

HEAD: 포인터

보통을 현재 작업 중인 브랜치의 가장 최근 커밋을 가리킨다.

새로운 커밋이 생길때 마다 최신 커밋으로 이동한다.

 

[라인 삭제]있는 HEAD가!  [part1 파일 수정]으로 최신 commit 으로  옮겨 간것이 보인다.

 

흠..
다른것을 비유하자면, 책갈피를 생각하면 될꺼 같다.
내가 보던 마지막 곳에 책갈피를 끼워두는 것이다.

반전

그렇다고 HEAD가 최신 커밋만 가르키는건 아니다!
과거로 이동이 가능하다

똑같지는 않지만 비슷하게 비유를 하면,
책을 중간쯤 보고 있는데, 앞전에 읽었던 내용이 기억이 나지 않아 다시 보다가 덮었을때,
그 앞쪽으로 책갈피를 옮긴거 같은 느낌

또, 반전

여기서는 되돌아 간다는건, 완전 과거에다 다시 싹~~ 지우고 재작업하고 싶을때가 아니면 안가는게 좋다.
복구는 할수 있지만.. git에 대한 마스터가 아니면 하지 않는것이...흠
git reset을 잘 다루지 못한다면...

 

 

 

 


 

 

 

Commit의 과거로

과거로 커밋을 아예 돌아가고 싶을때 , 무엇을 쓰냐에 따라 데이터가 삭제된다!

 

이미지의 보면 노란색 글씨는 commit의 아이디 이다. 다 ~ 쓰지 않아도 되고 앞의 4자리만 적어도 된다

$ git reset --soft 4b04 // HEAD:포인터만 과거로 이동 내용을 안바뀜
$ git reset --mixed 4b04 // HEAD:포인터 과거이동, add 한 내용 변경!!!!
$ git reset --hard 4b04 // HEAD:포인터 과거이동,  add 한 내용 변경!!, working directory 변경!!!

 

HEAD의 이동이 보인다. 나는 지금 파일이 다 삭제 되었다 ㅠㅠ 

 

 

 

 

 

 

 

코드잇-깃수업[참조]

 

 

 


 

 

 

 

 Commit의 최신기록으로

수정, 파일 추가등 아무것도 하지 않았다면, 다시 최신commit 기록으로 돌아가기 편하다

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

git reflog // HEAD가 그동안 가리고있던 커밋들의 기록을 출력한다

 

git reset --hard 21ae // 최신 commit 아이디를 써주면 그 기록으로 돌아간다

 

 


 Commit의 취소? 되돌리기?덮어쓰기?

 

 

 

 

git reset: commit 취소

$ git reset --hard 4b40

 

 

 

 

 

git revert: commit 되돌리기

$ git revert 4b40 // 돌아가고 싶은 커밋을 적는다.

git revert는 이전 기록으로 돌아가는것이 아닌.
이전의 기록를 새로 commit으로 만든다.

그래서 최신 커밋위에 새로 revert로 되돌아간 commit이 생성된걸 볼수 있다

 

 

 

 

 

 

git commit --amend: commit 덮어쓰기

파일의 띄어쓰기던 티안나게 파일을 수정한다.

[local lepogitory]
1. $ git commit --amend // 수정할 에디터가 켜진다. commit 메세지를 수정한다.

[remote repogitory]
2. $ git push -f origing [branch이름] // 이렇게 적어주면 강제로 push를 하여 덮어쓰게 한다

 

 

 

 

 

 

 

 

이어서...(2)