기본) commit&tag/revert&reset/branch
커밋해쉬orTag 과거로 이동/돌아가기/되돌리기/브랜치 학습
📜 제목으로 보기
- 타인repo를 clone후 commit, tag 코드 옮겨다니기
- 내 repo 돌아가기, 되돌리기
- 내repo branch(평행우주) 만들기 for 기존플젝에 새로운 도전
- 평행우주로 이동도:git checkout [브랜] or 더블클릭 in 소스트리
- 브랜치에서 새 브랜치 따기
- 연결된 3개의 평행우주에서 상황맞이
- 다른 우주(의지를 이은 가장 바깥가지 브랜치)에서 변화 가져오기: [ 받을놈branch이동후] git merge [줄놈branch]
- reset –hard로 merge전으로 돌아간 후, 소스트리로 merge하기
- 아름답지 않은 merge + conflict후에는 메세지없이 git commit
- 다른우주도 1줄로 만들어 통합: git rebase(재배치)
- 다 쓴 브랜치 삭제: git branch -D
타인repo를 clone후 commit, tag 코드 옮겨다니기
- 실습레포:
/home/is2js/workspace/git-test
- Reference
commit_hash or tag로 점프: git checkout [hash or tag]
-
환경변수를 파악하고 code .
-
vscode로 리조지토리 초기화
-
vscode push 버튼으로 올리기
-
git fetch는 해두는 게 좋다
- 내 repo에 누가 작업을 추가했는지 파악만 해주는 것
-
강의별로 commit을 한다면?
-
커밋별로 tag를 추가로 만들어준다.
-
예를 들어
-
5화 작업
- 5화 커밋
git tag 5
- 5화 커밋
-
6화 작업
- 6화 커밋
git tag 6
- 6화 커밋
-
push
by vscode push버튼
-
-
-
git checkout [git_id]
으로 5화 이전의 4화로점프
띄어보자.-
4화 부분의 git id 복사
-
해당 폴더의
vscode 터미널
에서git checkout [git_id]
git checkout fefc0cacbf262ae0794e64a632afa2da095b622a
-
이때 brunch자체가
[git_id]
로 변하면서 과거로 돌아간다
-
이때 brunch자체가
-
현재로 돌아오려면,
기존 branch(master)
로 checkout한다git checkout master
-
-
git checkout [tag명]
으로점프
띄어보자-
각 커밋마다 커밋후 쉬운 이름표인 tag를 만들어준다.
-
아까 5화 작업 끝나고,
git tag 5
-
5화 끝난후의 소스를 보고 싶을 땐 이렇게 이동한다
#git checkout [tag명] git checkout 5
-
-
-
다 참조가 끝났다면, 다시 최근소스의 branch로 오면된다.
git checkout master
-
-
tag는 대신 따로 push를 해줘야한다.
- 커밋들을 push한거로는 tag까지 push가 안됨.
git push --tags
-
버튼으로는 잘 안보이고 팔레트 > push 검색 >
git push tags
를 선택해준다. -
참고)
-
맨첨 커밋에는
0.0.0
의 tag를 만들어주고 -
그 이후로는
1.0.0
부터 쭉 만들면된다.
-
내 repo 돌아가기, 되돌리기
기본 세팅
/home/is2js/workspace/git-practice
-
소스트리 설치
- vscode에서는 설정(ctrl+,)에서
exclude
검색후.git
을 삭제하여 보이게 하기
- vscode에서는 설정(ctrl+,)에서
-
디렉토리에서 vscode열기
-
vscode 터미널 열여서 git설정 저장하기
git config --global user.name "is2js" git config --global user.name "tingstyle1@gmail.com"
-
-
.git
폴더를 삭제후 소스트리에서 해보기-
create를 통해 해당폴더를 선택해서 만들어준다.
- 이미 폴더가 있는데 이 내부에 .git생성할까 물어보면 OK
-
create를 통해 해당폴더를 선택해서 만들어준다.
-
2개의 파일을 만들고 이 상태를 저장하기
- cat
- mouse
-
git status
(gst)를 통해 아직untracked 파일들
확인 후 addgit add -A
git status
-
메세지(
-m
)와 함께 묻기(commit 해주기)git commit -m "First commit"
-
묻은 것을 소스트리에서 확인해보기
터미널에서 히스토리 확인하기
git log --oneline
-
소스트리는 git status없이 묻을 파일을 자동으로 알려준다.
- vscode도 extensiont쪽에 알려줌?
- dog라는 파일을 만들고
- 소스트리에서 확인해서 add + 커밋까지해보자.
- 파일 삭제 + 변경 + 생성을 한꺼번에 한 뒤
git status
로 보자.- 삭제+변경과 생성을 따로따로 알려주며 다 알려주긴 한다.
- 소스트리도 아이콘으로 알려준다.
-
git log
로 이때까지 묻은 캡슐들을 한꺼번에 볼 수 있음. 소스트리에서는History
탭에서 보면 된다.
과감한 돌아가기: git reset [commit_hash] –hard
-
돌아갈때는
과감한방법
과신중한방법
이 있다.-
과감한방법(--hard)
: 복원이후시점은 완전히 지우겠다.-
git log상의 commit_id 앞6글자만 복사후
-
git reset [commit_id] --hard
-
-
다시 한번 cat삭제 + dog이름변경 + 펭귄추가를 해주고 commit한뒤 소스트리로 reset –hard해보자.
-
이 커밋까지 현재브린치를 초기화
- Hard(버림) 선택
-
-
-
신중한방법(--soft)
: 시점만 돌아가고 + 그 이후는 커밋되지 않은 상태로 파일은 유지
(반대동작으로 취소시켜, 돌아갈 미래를 남긴체) 되돌리기 : git revert
-
**
[reset으로 돌아갈 수 있는 미래]를 남겨두기 위해, [반대동작으로 취소시켜] 되돌리기
** - 다시 3번째 커밋까지 만들어준다.
- 이번에는
돌아갈시점 6자리 for reset
이 아닌취소할 시점 6자리 for revert
를git log
에서 찾는다.-
취소할 커밋
을revert(취소)했다는 커밋
이 그대로 이어서 남는다.- 소스트리를 통해 확인하면, 정확히 취소할 커밋이, 커밋시 수행한 동작을 정확히 반대로 수행하여 취소함.
-
취소할커밋
이 커밋기록으로 남아있으니,reset --hard(이 커밋까지 현재브런치를 초기화)
을 통한 해당 커밋으로 과감하게 돌아갈 수도 있다.
-
- **즉,
[reset으로 돌아갈 수 있는 미래]를 남겨두는 [반대동작으로 취소시켜] 되돌리기
**
-
가장 최근 것을 revert로 취소시켜보자.
git log
- 제일 최근시점을 취소시키기 위해, 최근 커밋(현재커밋) 6글자 복붙
-
git revert [취소시점6자리]
+:wq
- 커밋메세지 작성화면으로 들어온다.
-
여기선
:wq
로 나와야 해당 revert 커밋메세지가 전달된다.
-
3번째 커밋이 취소된 것을
파일이 reset처럼 과거상태로 돌아감
을 보면 알 수 있다. -
git log
를 확인해보니, 돌아간시점이후로 가 삭제된 것(reset –hard, 과감한 돌아가기)가 아니라 새 커밋이 형성되었다.- 소스트리에서 보아도 3번째 커밋을 상쇄시키는 커밋이 추가로 발생함
-
자세히 보면, 소스트리를 통해 확인하면, 정확히 취소할 커밋이, 커밋시 수행한 동작을 정확히 반대로 수행하여 취소함
- 3번째 커밋(취소할 커밋) 때 한 동작들
- 4번째 커밋인
3번째 커밋을 취소함(revert)
를 할때의 동작들
-
revert를 통해 취소할커밋도 reset-hard와 다르게 기록으로 남아있으니 reset을 통해
취소하기 전의 3번째 커밋상태
로 과감하게 돌아갈 수도 있다. -
소스트리를 통한 revert는
커밋 되돌리기
다.-
역시.. (반대동작으로 취소시켜)
되돌리기
=revert
-
커밋 되돌리기
==반대동작을 통해 해당 커밋을 취소시킴
-
-
내repo branch(평행우주) 만들기 for 기존플젝에 새로운 도전
- 회사 프로젝트를 내가 함부로 수정할 수 없으니
- 현재 프로젝트에서 다른 시도를 해보고 싶을 때, branch를 만들어 평행우주로 넘어간다.
평행우주로 이동도:git checkout [브랜] or 더블클릭 in 소스트리
-
브랜치 생성
- 브랜치 : 현 시점에서 2개의 미래로 분기를 시작하겠다.
- 현 시점과 동일한 상태 그대로 가져가면서 분기함.
#git branch [만들 브랜치명] git branch my-idea
-
확인은
git branch
만
- 브랜치 : 현 시점에서 2개의 미래로 분기를 시작하겠다.
-
브랜치 이동도
git checkout
-
과거로 점프갔다오기 : git checkout [commit_id or tag]
- 과거로 돌아가기 : git reset –hard or git revert [commit_id]
-
과거가 아닌
현재->다른평행우주(branch)로 이동
도git checkout
+브랜치명
#git checktout [브랜치명]git checktout my-idea
- branch변경해도, 내 파일상태에는 변함이 없음. 현재 상태를 그대로 가지고 평행우주를 만들어서
-
-
데이터 변경 후 커밋하기 in
my-idea브랜치
-
mouse 삭제, dinosaur 추가
- 용이름 둘리
-
현 branch에서 커밋하기
git add -Agit commit -m "Add dino"
-
-
상사가 부를 땐, 원래 우주로 돌아간다.
-
원래 브랜치는 master였다.
-
이동 전
-
이동 후 (파일이 원래대로 돌아옴)
git checkout master
-
-
git을 처음 배울때는 파일이 잘못될까바 불안해서 사용안할 수도 있는데, 앞으로 계속 사용해보자~
-
-
소스트리에서 다시 해보자.
더블클릭으로도 우주를 왔다갔다 하며 확인
할 수 있다.- 브랜치 부분에 my-idea가 추가됨. 여기서 각 브랜치를 더블클릭할 때마다, vscode의 파일도 같이 바뀌더라.
브랜치에서 새 브랜치 따기
-
my-idea로 checkout된 상태에서, 상단의
브랜치
탭에서 새로 생성해보자.- 이 때, 새 브랜치로 체크아웃을 체크해주면, 자동으로 새 브랜치로 넘어가진 상태가 된다.
-
my-idea
에서 파생된 브랜치라 그 상태를 그대로 가져갔다.
-
브랜치의 브랜치 상태에서, 데이터를 변경후 커밋까지
- cat 이름을 변경:tom to nyang
연결된 3개의 평행우주에서 상황맞이
-
상사가
master
의 내용을 바꾸길 원함.-
요구 대로 바꿔고, commit한다.
git add -Agit commit -m "EDIT dog name"
-
-
평행우주에서, 타 브랜치의 base가 되는 branch(여기선 maser)가 한발(commit) 나서게 되면, 분기된 branch가 나눠서 그려진다.
다른 우주(의지를 이은 가장 바깥가지 브랜치)에서 변화 가져오기: [ 받을놈branch이동후] git merge [줄놈branch]
-
현재 메인프로젝트
master
의 변경내용과는 서로다른평행우주끼리 다른파일 수정
이라면,브랜치의 브랜치
라도 편하게master로 merge되는 것을 권유
할 수 있다.-
아래 내용을 상사에게 권해본다.
-
my-idea
에서 mouse삭제 후 dino 추가했고 -
my-idea
-my-another-idea
에서 cat이름을 변경했는데- 이것들을 메인프로젝트에 적용해도될까요? Okay 승인
-
-
2개의 평행우주에서 일어난 일을 master브랜치로 가져야가한다.
-
이 때,
브랜치1의 브랜치2
는 생성부터브랜치1의 변화를 그대로 가져와서 생성
되므로브랜치2만 반영시키면 된다.
-
-
-
merge를 위해서는
-
먼저
받는놈 브랜치(master)
로 이동(checkout)한 상태여야한다.git merge [줄놈 브랜치명]
git checkout mastergit merge my-another-idea
-
변화를 보니 master의 상사지시 + 평행우주에서 한 것들이 모두 반영되어있다.
-
master
에서의 dog name to 바꾼 것도 반영되어이있지만 -
my-another-idea
에서의 쥐삭제+용추가 한 것도 동시에 반영된 상태다.
-
-
-
확인은
- 소스트리
- vscode git graph가 아니라면
-
git log --graph --all --decorate
로 확인하란다-
git log --graph --oneline
정도면 충분할듯?
-
reset –hard로 merge전으로 돌아간 후, 소스트리로 merge하기
- 소스트리로 실습하기 위해 merge전으로 돌아가보자.
-
merge 직전의
받는놈 브랜치
의가장 마지막 커밋 == merge전 커밋
으로-
git reset –hard
-
소스트리:
이 커밋까지 현재 브랜치를 초기화
-
-
소스트리로 merge하려면 더 간단한데
- 받는놈의 branch를 더블클릭해서 이동
-
주는놈 branch
를우클릭
>현재 브랜치(받는놈 더블클릭 상태)로 my-another-idea(주는놈, 우클리상태) 병합
- 나중에는.. 수많은 폴더와 파일을 다뤄야하기 때문에,
-
기존프로젝트에 새 도전을 하려면 반드시
git branch
써야함.
-
기존프로젝트에 새 도전을 하려면 반드시
아름답지 않은 merge + conflict후에는 메세지없이 git commit
- 원래 merge가 성공하면 git이 자동 add + commit까지 한다.
-
bark-wang
브랜치 생성후, dog 파일 수정 -> commit❯ git branch bark-wang❯ git checkout bark-wangSwitched to branch 'bark-wang'❯ git add -A❯ git commit -m "EDIT dog file"
-
이제 받는놈인
master
로 돌아와서 같은 dog파일 수정하자.❯ git checkout masterSwitched to branch 'master'❯ git add -A❯ git commit -m "EDIT dog file bar warlwarl"
- master가 한발짝 나가는 순간부터 분기가 갈라져 보인다.
-
현재,
master
와bark-wang
이 서로 같은 파일을 수정한 상태다.-
아까의 merge는 서로 다른파일이 수정된 상태라 merge가 쉽게 되었다.
-
한번 merge해보자
❯ git checkout masterAlready on 'master'❯ git merge bark-wangAuto-merging dogCONFLICT (content): Merge conflict in dogAutomatic merge failed; fix conflicts and then commit the result.
-
-
merge시 conflict가 뜨는데
같은 파일을 여러 평행우주에서 수정
했기 때문이다.- conflic가 없었을 때의 merge는?
- merge를
자동으로 커밋까지
해주는 커밋메세지 확인이 떴었다.
- merge를
- terminal에 안내문이 뜬다
-
소스트리에서는
그래프가 회색으로 연결안되어있으면서 "커밋하지 않은 변경사항"
의 상태로 뜬다. - vscode에서는 conflict된 부분을 나눠서 알려준다.
- conflic가 없었을 때의 merge는?
-
conflict는 vscode에서 택1해서 지울건 지운 뒤,
add
후git commit
을-m 없는 상태
로 커밋을 날리면 자동으로merge 메세지
가 뜬다.-
accept incoming ~
in vscode
git add -Agit commit
-
conflic후 commit은 메세지없이
git commit
만 날리며 알아서merge 메세지가 미리 작성
되어있다.
-
- 앞으로 다른 브랜치끼리는 같은파일을 수정안하도록 작업하면 merge가 편안해진다.
다른우주도 1줄로 만들어 통합: git rebase(재배치)
-
프로젝트의 성격에 따라 필요한 것을 선택해서 사용하면 된다.
-
지금은 git log상 2갈래 정도만 나오지만
-
실제로는 엄청나게 많은 줄기가 생기게 된다.
-
-
딱 1줄로 통합되도록 merge하는 방법이 git rebase다
-
소스트리상으로는 master(받는놈)에서 주는놈(bark-warl) 우클릭 >
재배치(rebase)
를 클릭한다. -
같은 파일을 건들인 상황이니 똑같이 conflict해결후 add+commit한다.
-
재배치가 끝나면 분기가1 줄로 나타난다.
- 브랜치라도 합쳐지는 모양이 아니다.
-
다 쓴 브랜치 삭제: git branch -D
-
rebase는 1줄로 받는놈(masetr)에 통합되어버린다.
-
그럼 작업한 branch(주는놈)은 더이상 필요 없을 것이다.
- 대문자로
-D
옵션을 준다 - 소스트리는 우클릭으로 바로 할 수 있다.
❯ git branch -D bark-wang Deleted branch bark-wang (was 5fefbe0).
-
-
merge를 통해 분기가 합쳐졌던 branch들도
git branch -D
로 삭제하였더니- 분기 표기는 남아있는데, branch만 사라졌다.