지영이의 개발 블로그

[Git&Githurb]자주 사용하는 Git 명령어 정리 & githurb 협업 (긴글주의) 본문

Git&Github

[Git&Githurb]자주 사용하는 Git 명령어 정리 & githurb 협업 (긴글주의)

이지영 2022. 7. 28. 10:13

Git

1.git add, commit,status,log

git의 commit 기능을 쓰면 쓰면 파일의 현재상태를 매일매일 기록해둘 수 있습니다.정확히 말하면 파일의 스냅샷을 저장해줍니다. 그럼 원할 때 쉽게 되돌아가거나 그럴 수 있습니다. 

✔여러 파일을 동시에 스테이징

git add 파일명1 파일명2

작업폴더의 모든 파일을 전부 스테이징

git add .

지금 변경된 파일, 스테이징된 파일 이런걸 쭉 알려줌.

스테이징된 파일을 취소하고 싶을떄

git restore --staged 파일명

commit 기록을 한 눈에 파악하고 싶으면 git log 명령어 입력하면 됩니다.

--graph 옵션을 넣으면 그래프로 그려줍니다 ( 입력 후엔 Vim 에디터가 켜져서 j, k 키로 위아래 스크롤이 가능하고 q 키로 종료할 수 있습니다. )

2.git diff

commit 하기 전에 이전과 현재 코드가 어떤 차이가 있는지 알고 싶을때 git diff 명령어를 쓰면 됩니다. 바로 전 commit과 현재 코드의 차이점을 비교해줍니다

최근 commit과 비교하는게 아니라 과거의 특정 commit과 현재 파일을 비교하고 싶으면 커밋ID를 명시해주면 됩니다.

git diff 커밋id

과거의 특정 commit 2개 간의 차이점 비교

git diff 커밋id1 커밋id2

비주얼적으로 훌륭하게 차이점을 분석해줍니다. 현재 파일과 최근 commit의 차이점을 비교

git difftool

3.git branch

커밋하면서 계속 코드짜다보면 갑자기 새로운 기능을 추가하거나 그래야하는 경우가 있습니다.그럴 때는 원본파일에 코드를 추가하고 커밋해도 되겠지만혹시나 잘못해서 지금까지 짰던 프로그램이 망가지거나 그러면 어떻게하죠? 

그럴 걱정 없이 안전하게 새로운 기능을 추가하고 싶으면프로젝트의 복사본을 만들어서 거기에 먼저 개발해보자 

git 안에선 branch 기능을 이용해서 복사본을 쉽게 만들 수 있습니다.

 

✔프로젝트 사본이 하나 생성됩

예를 들어 방금 만든 coupon 브랜치로 이동하고 싶으면 git switch coupon 하면 됩니다.

branch 와 commit 내역을 한 눈에 그래프로 보고 싶으면

 

4.git merge

브랜치를 합치는걸 전문용어로 merge라고 합니다. 그럼 브랜치에서 개발했던 내용을 main 브랜치에 더해줄 수 있습니다. 

✔예를 들어 coupon 브랜치의 코드들이 main 브랜치에 합쳐집니다.

합칠 때 주의사항이 있는데 master 브랜치와 coupon 브랜치에서 같은 파일, 같은 줄을 수정했을 경우 merge conflict 가 발생합니다.

둘 중 어떤 코드를 적용할지 고르면 되는데 <<<< / >>>> / ==== 이런 쓸데없는 것들은 다 지우고 원하는 코드만 남기면 됩니다.어떤 코드를 남길지 결정했으면 git add 파일명 git commit -m '메세지' 입력하면 새로운 commit 을 생성해주며 브랜치 합치기 끝입니다. 

 ①3-way merge  

    :브랜치에 각각 신규 commit이 1회 이상 있는 경우 merge 명령을 내리면 두 브랜치의 코드를 합쳐서 새로운 commit을       자동으로 생성해주는데 3-way merge 라고함

 

 ②fast-forward merge 

     : 합칠게 없어서 신규브랜치를 main 브랜치로하는 것입니다. 

5.브랜치 삭제

병합이 완료된 브랜치 삭제시엔 -d 

병합하지 않은 브랜치 삭제시엔 -D 

6.rebase 

rebase는 브랜치의 시작점을 다른 commit으로 옮겨주는 행위입니다.

1. rebase를 이용해서 신규브랜치의 시작점을 main 브랜치 최근 commit으로 옮긴 다음 

2. fast-forward merge하는 것입니다. 이런 식으로도 브랜치 합치기가 가능

3-way merge 말고 강제로 fast-forward 하고 싶을 때 사용

7.spuash

3-way merge 된 것들은 매우 복잡해보임  main 브랜치 git log 출력해보면 3-way merge된 브랜치들의 commit 내역도 다 같이 출력되어서 더러워짐 그러기 싫으면 rebase 아니면 squash and merge 하면 됩니다. 

3-way merge처럼 선으로 이어주지 않고

새 브랜치에 있던 코드변경사항들이 main 브랜치로 텔레포트합니다.

8.git revert, reset, restore

1)git restore : 파일 되돌리기 

✔최근 commit 된 상태로 현재 파일의 수정내역을 되돌릴 수 있습니다. 

입력한 파일이 특정 커밋아이디 시점으로 복구

git restore --source 커밋아이디 파일명

특정 파일을 staging 취소할 수 있습니다. 

git restore --staged 파일명

2) git revert : commit 되돌리기

커밋아이디에서 일어난 일만 취소 (없애버리는건 아니고 commit 하나를 취소한 commit을 하나 생성해줍니다. )

▲ revert 명령시 가끔 Vim 에디터가 뜸커밋 메세지 수정하라는건데 i 눌러서 글자수정하고 싶으면 하고 esc 눌러서 나올 수 있습니다. 그리고 :wq 누르면 커밋 메세지가 저장됩니다.

git log 다시 해보면 revert 해줬다는 commit이 자동으로 생성되어있고작업폴더에서 a, c 파일은 있지만 b 파일은 삭제되어있군요.  결론은 revert 명령어 쓰면 특정 커밋에서 있던 일을 지워버릴 수 있습니다.

 

 최근 했던 commit 1개만 revert

git revert HEAD

2) git reset : 시간을 되돌리고 싶으면

commit2로 reset --hard 해버리면 commit2 이후의 미래 기억을 모두 잃습니다. 

✔hard : a, b파일은 남아있고 c 파일이 삭제

git reset --hard d874b2b

✔soft : a, b파일은 남아있고 c 파일은 staging area에 남아있슴

git reset --soft d874b2b

✔mixed : a, b파일은 남아있고 c 파일은 staging 되지 않은 상태

 

Githurb

repository 란?

git의 파일버전을 저장해두는 장소를 repository라고 합니다. 로컬 작업폴더엔 .git 폴더가 있는데 그걸 repository라고합니다. (repository는 한국말로 저장소라고합니다. )

1.push, clone

✔branch 이름 변경

git branch -M main

✔Github에서 만든 원격 저장소에 올리기

✔ 로컬 브랜치를 원격에 올리고 싶으면

git push 원격저장소주소 로컬브랜치명

git push 원격저장소주소 로컬브랜치명 하면 특정 로컬저장소 브랜치 -> 원격저장소

git push 원격저장소주소 하면 모든 로컬저장소 브랜치 -> 원격저장소

 

✔변수명을 사용해 짧게 쓰기 => git push 만 해줘도 됨

git remote add origin https://github.com/codingapple1/lesson.git

✔변수목록을 살펴보기

git remote -v

원격저장소에 있던 내용을 그대로 내려받기

2.ignore

.gitignore파일이란 Git 버전 관리에서 제외할 파일 목록을 지정하는 파일이다. git으로 프로젝트를 관리할 때, 그 프로젝트 안의 특정파일들은 Git으로 관리할 필요가 없는 경우가 있다.

git 의 추적을 피하고 싶은 파일명들을 적어주면 됨

3.pull

git push는 맘대로 할 수 있는게 아닙니다. 갑자기 누군가가 만든 파일이 원격저장소에 생기면 git push 못합니다. 

✔원격저장소에 있던 모든 브랜치 내용을 가져와서 로컬저장소에 합치라는 뜻

이걸 해주면 로컬이 최신상태가 되기 때문에 이제 git push가 가능합니다. 즉 변동사항이 생겼다면 git pull 하고 나서 git push 하면 됩니다.

- git pull 원격저장소주소 브랜치명 입력하면 특정 브랜치만 가져올 수 있습니다.

- origin이라는 변수명을 등록해놨으면 당연히 사용가능

- 예전에 -u 했었으면 git pull, git push까지만 입력해도 잘됩니다.

4.Pull request

깃허브는 pull request 라는 기능이 있습니다. 즉  merge request입니다. 

▲  Pull requests 메뉴에서 초록버튼 누르면 pull request 생성이 가능합니다.

▲ 그 다음엔 어떤 브랜치를 어디에 합칠 것인지 선택하고하단에서 commit 내역, 변경내역 잘 보고

초록버튼 누르면 pull request가 열립니다.

▲ 그럼 Pull requests 메뉴에서 이렇게 확인가능한데 누르면 팀원끼리 토론할 수 있는 곳도 있습니다. 거기서 코드를 리뷰하면 됩니다. 

▲ 확인하고 merge하기로 했으면merge 할 때 여러가지 옵션을 선택 해주면 됩니다.

create a merge commit

새로운 merge commit을 하나 생성해주는 3-way merge를 실행해줍니다. 

- main 브랜치 조회시 합쳐진 브랜치의 commit 내역도 전부 나옴  

- 터미널에 git log --oneline --graph 해보면 합쳐진 브랜치도 그림으로 나옴 

- 그래서 commit 내역이 많으면 복잡하고 더러워보일 수 있습니다. 

squash and merge 하면 

- 합쳐질 브랜치의 commit 내역을 하나로 합쳐서 main 브랜치에 신규 commit을 생성해줍니다.

- git log --oneline --graph 해보면 합쳐진 브랜치 안나옴 

- commit을 하나로 합쳐서 main 브랜치로 순간이동 시켜주는 행위라 사람들이 깔끔하다고 좋아합니다. 

 

rebase and merge 하면 

- 합쳐질 브랜치를 main 브랜치 최신 commit으로 rebase하고나서 fast-forward merge 비슷한걸 해줍니다.

- 결과는 squash and merge와 비슷한데 합쳐질 브랜치의 commit 내역이 전부 보존됩니다. 

- 애도 git log --oneline --graph 해보면 합쳐진 브랜치 안나옴

'Git&Github' 카테고리의 다른 글

Git & Github (2)깃과 브랜치  (0) 2022.06.27
Git & Github (1)  (0) 2022.06.15
Git_Cheat_Sheet  (0) 2022.06.15
Comments