코드스테이츠 - Git 명령어

kwak woojong·2022년 5월 3일
0

코드스테이츠

목록 보기
8/36
post-thumbnail

ㅎㅇ...

난 깃을 혼자 연습용으로 올리고 있었음, 노트북으로 공부할때 파일 공유를 해야하기 때문

걍 dropbox같은거 써도 됐을건데 굳이 git을 쓴 이유는! 어차피 나중에 git써야 할테니까

명령어라도 익숙해져야지...

문제는 다른 사람이랑 협업을 해본적이 없기 때문에, 이번 페어는 조금 기대가 됐다.

머리속에만 있던 내용들을 실제로 해보니까 ( 그 전에 친구랑 해볼걸 ㅋㅋㅋ )

하여간 git 명령어랑 내용을 조금 정리해보자

어차피 내가 이거 다시 보러 오는거면 주로 명령어 보러 오는거일거 아냐?


Git 명령어

1. clone

repo 를 내 local로 복사한다.
비어있는 폴더에 해야한다 (.git 폴더가 없어야 한다.)
즉 git init를 안한 상태로 바로 clone를 해야함. (오류나더라)
clone 메뉴얼 보면 미친듯이 많은 옵션이 있는데, 보통 이것만 알면 될듯.

git clone [레포주소] [로컬주소]

레포주소는 보통 저런거 복붙임.

로컬주소는 왜 넣었냐고? 저기에 . (dot, 쩜) 찍어야 폴더가 안생긴다.

어차피 님이 clone 할 땐, 폴더 하나 만들어 놓고 했을거 아님? (으흐흐 여기다 해야지)
근데 걍 clone하면 레포 이름으로 폴더가 하나 더 만들어짐

원하던 것 : project/repo
실행된 것 : project/repo/repo

그래서 dot을 찍는다. 주소에 요기다가 해주세용 이라고 하는거임

아님 걍 project에서 clone을 땡기던가


2. status

현재 상태를 알 수 있음

	git status

커밋이 뭐 됐는지 브랜치는 어딨는지 이런거임


3. git restore

git 파일 조작으로 쓰이는 명령어임 (특정 커밋으로 돌리기, 언스테이징)

git restore [파일이름]

이렇게 쓴다. 그럼 HEAD commit 로 복구 된다.

또 다른 사용법으론 특정 commit로 돌리는게 있는데

git restore --source [커밋hash] [파일이름]

이걸로 돌릴 수 있다.

언스테이징하는 방법도 있는데

git restore --staged [파일이름]

이건 스테이징 되어있는 특정 파일을 다시 내리는 효과를 가지고 있다.


4. add

수정된 파일을 스테이징한다. git status가 상태 확인 (현재 스테이징에 뭐가 있냐)을 할 수 있다면, 이건 스테이징에 +해준다. 여기에 commit, push하기 전 징검다리라 생각하자.

git add [파일이름/디렉토리]

로 사용한다. 아직 커밋은 안했으므로 메시지는 못넣는다.

바뀐 파일을 죄다 add하고 싶다면 파일이름/디렉토리에 . (dot, 쩜)을 넣으면 된다.


5. commit

add 된(스테이징된) 파일을 확정짓는걸 커밋이라고 보면 된다. 뭔가 말이 어렵다.
add는 스테이징을 한다. "야 이거 회원가입기능 넣어놨어" 정도라 생각하자.
커밋은 "회원가입 기능 추가 버전이라고 적어넣을께" 라고 생각하자.

뭔가 의미 있는 변화가 생겼을 때, 코멘트를 넣고 git 파일에 확정을 짓는거라 생각하면 된다.
물론 아직 local 단계라 github repo에는 변화가 없다.

git commit -m "메시지"

메시지는 항상 유효하고 직관적이며 누구나 알 수 있어야 한다. 이 커밋이 무엇을 의미하는지 말이다. 이를테면

"ㅋㅋㅋㅋㅋㅋㅋ 기능개발 끝났쥬? 개쩔었쥬?"

이런 커밋과

"회원가입 기능 추가 완료"

뭐가 더 직관적인 메시지인가? 당연히 아래지 ㅋㅋㅋ


6. reset

만약 커밋을 잘못 올렸다면 이걸 취소하긴 해야한다. 메시지에 "상사조까 시말서나 쓰자 짜샤"
라고 써놨는데 이거 들키면 큰일나지 않겠나? git reset은 커밋한 포인터를 뒤로 돌린다. 여기에 옵션을 넣어서 삭제하는거임. 이러면 git HEAD가 이전 커밋을 가리키게되고 로컬에서 커밋 이전에 상태로 강제 변경해버린다.

git reset --hard [커밋주소]

커밋 주소대신 HEAD라는 옵션을 사용할 수 있다. HEAD~1 같은 표현을 쓰면 바로 이전단계로 HEAD가 이동하고 (포인트 이동이 아님) HEAD~3으로 하면 전전전단계 커밋으로 간다.

근데 차라리 메시지 잘못썼으면 커밋의 다른 옵션을 쓰자

git commit -amend

이 명령어는 커밋을 덮어쓴다. 바꾼 파일이 없어도 메시지만 바꿀 수 있으니까 유용함. 그러니까 커밋할땐 욕쓰지 말자 캬캬캬


7. log

커밋 히스토리를 조회할 수 있는 기능이다.

git log

다른 기능과 마찬가지로 옵션이 디지게 많다. 그래도 디폴트로 명령해보면

나름 예쁘게 나온다

옵션기능은 구글링을 참고하자 format을 바꿔버릴 수 있다는거로 보인다.
근데 내 눈엔 저것도 좋아보이는데


8. pull

pull에 대해 이해하려면 fetch랑 merge를 알아야 한다.

원격저장소 즉 레포에 변동사항이 생긴걸 땡겨받는게 pull이다.

근데 이게 fetch랑 merge 를 합친거다.

fetch는 레포와 로컬을 비교해서 바뀐 내역을 가져와준다. 이때 브랜치는 이름이 없다. 그냥 들고와서 "이런거 있수" 하는거임. 여기서 이걸 받고 수행을 하다가 master 브랜치랑 병합을 하려 하면 이게 merge다. 근데 이게 pull이랑 똑같음.

git pull [레포] [브랜치이름]
git pull origin master

이렇게 쓰면 된다. 지금은 기초라 pull 을 알려주는데, 실은 fetch도 강력한 기능이긴 함. fetch로 눈치보고 내 수정코드를 좀 고치고 merge해야 에러 발생이 적지 않겠니


9. push

커밋한걸 로컬에만 두면 어떻게 하냐? 레포에도 올려야지

그게 push다. 레포이름이랑 브랜치 이름을 넣어야 한다.

git push [레포이름] [브랜치이름]
git push origin master

아까부터 계속 origin master라고 하는데
origin은 보통 내꺼를 말함
upstream은 보통 원본레포(근본레포)를 말한다.

master는 브랜치인데, 가지를 생각하면 편하다. 가지를 여러개 만들 수 있음

일하다가 여기저기 이렇게도 해보고 저렇게도 해보면 가지가 생긴다.

master가 중심이라면 여러개의 브랜치를 가지고 있다가 어 이거 괜찮네 싶으면 합치면 되잖아?

그때 merge를 쓰는거다. 상기 pull에서 설명했지만 fetch로 땡겨오면 이름없는 브랜치가 생긴다. 이걸 merge하면 (내 가지랑 합치면) pull이 되는거임.


10. init

여기서 git 시작할거야 라는 뜻임
.git 폴더를 만들어준다.

git init

스프링부트로 만든 뒤에 git init때리고 remote 연결해서 쓰면 된다.
아님 걍 레포 만들고 클론한 다음에 부트 파일 넣고 푸시하던가


11. remote

레포 연결할 때 쓰는 명령어임

git remote add [레포이름] [레포주소]

보통 이렇게 레포를 추가한다. 현재 연결된 레포의 상황을 보고 싶다면 -v옵션을 넣자

git remote -v

옵션 -v를 넣으면 현재 레포 상황을 알 수 있다.


profile
https://crazyleader.notion.site/Crazykwak-36c7ffc9d32e4e83b325da26ed8d1728?pvs=4<-- 포트폴리오

0개의 댓글