[Git] Git 기본 사용법2

Alex·2022년 4월 17일
0

git

목록 보기
2/2

📚 Git 기본 사용법2

📖 파일 이름 변경 & 위치 수정 (mv)

# 파일 이름 변경
$ git mv [대상 파일] [변경할 이름]


# 파일 위치 변경
$ git mv [대상 파일] [이동할 경로]

(Worst) mv server.py main.py # deleted, new file 상태
평소처럼 리눅스 명령어로 파일명을 변경하게 되면 기존의 server.py는 삭제된 파일로 처리되고, main.py는 새로 생성한 파일로 처리가 된다. 때문에 기존에 server.py가 가지고 있던 변경 history를 모두 잃어버리게 되어 좋은 처리 방식이 아니다.

(Best) git mv server.py main.py # renamed 상태
파일의 history를 남기면서 파일의 이름을 변경하기 위해서는 위의 git mv명령어를 꼭 사용해야한다.


📖 파일 변경사항 비교하기 (diff)

# 현재 수정된 파일(Working Derectory)과 Commit된 파일 상태 비교
$ git diff

# 임시 저장된 파일(Staging Area)와 Commit된 파일 상태 비교
$ git diff --staged

# commit 간의 비교 - commit hash ID값 이용 방법
$ git diff [비교할 Commit Hash ID1] [비교할 Commit Hash ID2]

# commit 간의 비교 - HEAD 이용
$ git diff HEAD HEAD^

# branch 간의 비교 - branch 이용
$ git diff [비교할 Branch1] [비교할 Branch2]

※ HEAD는 가장 최근의 커밋을 가르키며, HEAD^는 최신 바로 전 커밋을 말한다.

git diff를 이용하면 파일의 변경사항들을 비교하여 표시해준다. Working Directory와 Staging Area간의 비교도 가능하고, Branch간의 비교, Commit 간의 비교 등 다양하게 비교해볼 수 있다.


📖 브랜치 병합 (merge)

# 두 브랜치 합치기
$ git merge [병합하고 싶은 대상]

git merge 명령어는 브랜치 간의 개발사항을 병합하기 위해 사용한다.
먼저 기준이 될 브랜치로 이동하고, 현재 브랜치에 합칠 다른 브랜치를 선택하여 합친다.

예를 들어서 일반적으로 main 브랜치에 완성된 기능 create-user 브랜치를 합친다고 한다면, 먼저 main 브랜치로 switch하여 기준으로 잡고, create-user를 끌고와 합치는 것이다.

git merge를 하다보면, 같은 파일을 여러 사람들이 작업하기 때문에 코드간 충돌(conflict)이 일어나기도 한다.

이러한 경우 개발자가 직접 충돌이 일어난 파일을 열어 수정을 해줘야한다. 2개의 코드를 잘섞거나, 한 쪽을 지우거나, 둘 다 지워버리는 방법 등으로 흔히 해결한다.

merge conflict

📖 파일 변경 내용 되돌리기 (restore)

# 변경된 내용 되돌리기(modified file → unmodified file)
$ git restore

git restore 명령어는 수정된 파일 내용을 초기화하는 용도로 사용한다.

Working Directory상태 중 `modified file상태에서 unmodified file로 변경해주는 것이기 때문에 commit이 된 대상에겐 사용할 수 없다.


📖 로컬 저장 내용 되돌리기 (reset)

# 모든 파일을 임시 저장 상태에서 작업 상태로 변경 (Staging Area → Working Directory)
$ git reset HEAD

# 일부 파일만 돌리는 방법
$ git reset [특정 파일명]

# 로컬 저장소에 저장한 내용을 되돌리는 방법 (commit 취소)
$ git reset --soft HEAD^
$ git reset --mixed HEAD~2
$ git reset --hard HEAD~3

※ 만약 push까지 했다면 revert를 사용해 되돌리는 것을 추천
옵션기능
--hard(비권장) 지정한 commit 상태로 되돌리고, Working Directory와 Staging Area 내용을 모두 삭제한다.
--mixed지정한 commit 상태로 되돌리고, Workin Directory 작업 내용은 남겨준다.
--soft지정한 commit 상태로 되돌리고, Working Directory와 Staging Area 작업 내용을 그대로 남겨준다.

git reset은 임시 저장된 파일의 저장을 취소(Staging Area → Working Directory)하거나 로컬 저장소에 저장한 내용을 되돌릴 때 사용한다.

push 이후에 git reset을 권장하지 않는 이유는 push한 내용을 강제로 삭제할 뿐만 아니라, 다른 팀원의 로컬저장소에는 변경 내용이 아직 있어 재반영될 가능성이 있기 때문이다.

HEAD는 현재의 최신 commit한 hash id를 지칭
^ 최신 commit의 이전 commit를 지칭
~n n번째 전의 commit을 지칭한다.


📖 원격 저장 내용 되돌리기 (revert)

# 원격저장소의 내용을 되돌리기
$ git revert --no-commit HEAD~3

git revert는 push를 통해 원격 저장소에 저장된 내용을 취소할 때 사용한다.

git revert의 최고의 장점은 과거에 실수한 commit 내용을 유지한 채 수정된 commit을 넣어준다는 것이다. 이는 어떤 내용이 잘못되었고 그래서 수정되었음을 인지하기 좋고, 팀원들이 실수로 가지고 있던 내용을 재반영할 위험도 없어진다.

※ --no-commit을 설정하지 않으면 위와 같이 3번 commit을 수정할 시 매번 commit일어나지만, 설정하면 마지막 한 번에 commit을 하여 더 편하다.

git reset과 revert 쉽게 이해하기 을 읽어보는 것도 좋다.


📖 변경 내용 임시 보관하기 (stash)

git의 4가지 영역(stash)

기존의 3가지 상태에 Stash 상태가 추가적으로 존재한다. Stash상태는 임시적으로 작업사항을 저장해뒀다. 후에 다시 가져올 수 있게 해주는 임시저장 영역이다.

Stash 영역이 필요한 이유는 개발 도중 다른 개발자의 작업 내용을 확인(hotfix 라던가...)하기 위해 브랜치를 변경할 때 내가 수정한 내용을 안전하게 보존하기 위함이다.

개발 도중 다른 사람이나 내가 가진 다른 브랜치의 기능을 테스트해야할 때가 있다. 그런데 현재 브랜치의 변경한 내용을 저장하지 않으면 다른 브랜치로 변경할 수 없고, 그렇다고 완성되지 않은 기능을 commit할 수는 없는 노릇이다. 이때 git stash를 사용하면 임시 저장소에 보존한 채 다른 브랜치로 변경이 가능하다.

# 현재 작업 브랜치 내용 임시저장
$ git stash save
$ git stash -m "저장 내용 메시지"

# 현재 저장된 stash 목록 확인
$ git stash list

# stash에 저장된 내용 확인
$ git stash show [stash 인덱스값]
ex) git stash show stash@{0}git stash list를 통해 stash 인덱스값을 확인할 수 있다.

# stash에 저장한 내용 가져오기
$ git stash pop

# stash의 내용 삭제
$ git stash drop  # 제일 마지막에 저장한 내용 삭제
$git stash drop [stash 인덱스값]

stash는 기본적으로 스택처럼 동작합니다. git stash로 변경사항을 쌓아놓고, pop으로 가장 최근에 저장한 변경사항을 꺼내고 그 내용은 삭제해버립니다.

git stash 사용법을 읽어보는 것도 좋다.

profile
나를 위한 기록 저장소

0개의 댓글

관련 채용 정보