git 기초편 (5) - 실습[Reset, Revert, branch]
Reset , Revert
- reset : 원하는 시점으로 돌아간 뒤 이후 내역들을 지웁니다.
- revert : 되돌리기 원하는 시점의 커밋을 거꾸로 실행합니다.
git reset --hard [commit된 원하는 버전의 hesh]
##원하는 버전으로 이동후 이후 히스토리 삭제
##[hesh]를 입력하지 않으면 최신 버전의 히스토리(commit)로 돌아감
현업에선 revert를 주로 사용
git revert [commit된 원하는 버전의 hesh]
##원하는 버전으로 이동하고 이동하기 전 단계로 돌아갈 수 있는것을 commit함
git revert --no-commit [commit된 원하는 버전의 hesh]
##돌아갈 수 있는 것을 commit하지 않고 원하는 버전으로 돌아감
##취소하고 싶다면 git reset --hard
sourcetree에선 위 사진처럼 원하는 commit을 우클릭 후에 reset은 [이 커밋까지 현재 브랜치를 초기화] 를 선택, revert는 [커밋 되돌리기]를 선택해준다.
Branch (가지)
branch의 필요성
-프로젝트를 두개 이상의 모습으로 관리해야 할 때(현재 적용된 모습, 테스트용 모습)
-여러 작업들이 각각 독립되어 진행될 때(독립된 기능)
branch 생성
아래 명령어 입력
sourcetree에선 상단의 브런치 버튼을 누르고 진행
git branch [branch name]
branch 목록
아래 명령어 입력
sourcetree에선 좌측에 나와있다. 더블 클릭으로 이동이 가능하다.
git branch
다른 branch 로 이동
git switch [이동할 branch name]
생성과 동시에 이동
git switch -c [branch name]
branch 이름 변경
git branch -m [현제 branch name] [바꿀 branch name]
branch 삭제
git branch -d [삭제할 branch name]
##다른 branch로 가져오지 않은 내용이 있는 branch를 지울 때는
##git branch -D [삭제할 branch name] <<로 강제 삭제한다.
branch를 만들고 각 branch에서 commit을 해주면 우측 사진과 같이 나뉘어 진다.
여기서 [git log] 명령어를 입력하면 현제 속해있는 branch에서의 log만 보여준다.
전체적인 log를 보고싶다면 아래 명령어를 입력하면 된다.
git log --all --decorate --oneline --graph
branch 합치기
merge
두 브랜치를 한 커밋에 이어붙입니다.
기준이 되는 branch(ex master)로 이동해서 아래 명령어 입력
두 브랜치를 한 번에 적용 시키는 커밋이 생김
branch내역을 남기려면 사용
git merge [합칠 branch 이름]
소스트리에선 master로 이동한 후 우측 브랜치 리스트에서 우클릭 후 ‘현재 브랜치로 [] 병합’을 선택한다.
reset으로 돌아갈 수 있다.
merge한 branch는 필요없다면 삭제를 해도 된다.
rebase
브랜치를 다른 브랜치에 이어붙입니다.
히스토리를 깔끔하게 정리되게 하려면 rebase를 이용
협업에는 사용하지 잘 사용하지 않는다
붙일 내용이 포함된 branch로 이동한다.(사라질 branch)
그 다음 아래 명령어를 입력한다.
📌 이 아래로 기준이 되는 branch는 master branch, 붙일 내용이 포함된 branch는 slave branch라고 칭하겠습니다.
git rebase [기준이 되는 branch (ex : master)]
소스트리에선 rebase할 브랜치로 이동한 후 우측 브랜치 리스트에서 우클릭 후 ‘현재 변경사항을 []에 재배치’을 선택한다.
명령어를 입력한 직후에 slave branch는 합쳐진 상태이지만 기준 branch(master)는 합쳐지기 전의 상태에 있다.
이때 master branch로 이동해서 두 branch를 다시 merge로 합쳐준다.
branch 간 충돌 그리고 해결
다른 브랜치에서 같은 파일에 같은 줄에 서로 다른 내용을 입력하면 병합 할 때 충돌이 발생한다.
이 때는 프로그래머가 해결해야된다.
merge에서 충돌
충돌이 일어나면 해당부분을 수정하고 git add와 commit을 해준다. 이때 commit을 할 땐 메세지가 자동 완성 된다. (위 merge랑 같음)
당장 충돌 해결이 어려운경우 아래 명령어를 입력해서 merge를 중단시킨다.
git merge --abort
rebase에서 충돌
여기서는 해당 부분을 수정하고 git add를 한 다음 commit이 아닌 아래 명령어를 입력한다.
git rebase --continue
당장 충돌 해결이 어려운경우 아래 명령어를 입력해서 rebase를 중단시킨다.
git rebase --abort
rebase에선 branch의 commit을 다 붙이는 것 이기때문에 한 줄에서만 여러번의 충돌이 있을 수 있다. 그때마다 충돌 해결을 해줘야 한다.
마찬가지로 충돌 해결을 하고 rebase를 마쳤다면 master branch로 이동해서 merge로 마무리 해준다.