-
[Git] commit(reset,Checkout,merge)과 BranchGit 2022. 1. 12. 00:49728x90
[Git] commit(reset,Checkout,merge)과 Branch
commit과 Branch야 말로
제 생각이지만 git을 배운 의미와 "와 이건 진짜 유용하겠다"
라는 말이 절로 나오는 거 같습니다.
커밋을 하는 이유
흔히 버전 관리를 위해 한다고 말을 합니다.
코드를 짜다가 뭔가 이상하고 내가 큰 실수를 저지른 거 같고
혹은 이미 큰 문제가 발생해서 코드를 갈아엎어야 하는 상황일 때
를 대비해서 커밋을 해두는 겁니다.
git을 모르는 사람들은 압축을 해두거나
ctrl + z를 연발해서 어떻게든 살려보려고 하겠죠
그렇지만 우리의 소스코드가 멀쩡할 때
커밋을 해뒀다면? ctrl + z 수준이 아니라
시간여행을 한 거처럼 그 순간 그대로 돌아갈 수 있습니다.
앤드 게임처럼요
Commit 해보기
https://fast-it.tistory.com/46
Git/Github 기초 (Github에 소스코드 업로드)
Git/github 기초 git이 뭔지 github가 뭔지는 설명하지않겠습니다. 이미 아니까 글을 보러온거겠죠 혹시 git을 왜 배워야하는지(왜 쓰는지 아는데도)이해를 못하겠다면 그냥 나중에 배우시거나 자기
fast-it.tistory.com
전 글에선 index.py에 "First Commit"이라는 커밋을 남기고 github에 push까지 했죠
➜ git git:(master) ls index.py ➜ git git:(master) cat index.py print("First Commit")
이렇게 되어있어야 합니다.
이제 여러 번 커밋을 해보면서 특정 커밋 시점으로 돌아가 보겠습니다.
for i in range(10): print("Second commit in master!")
index.py를 이렇게 수정하고 저장 후 터미널에
git commit -am "Second commit in master!"
이렇게 작성해보겠습니다. -a는 git add . 을 생략하고 커밋할 수 있습니다.
그리고
git log --oneline
해보시고 커밋 내용들이 뜬다면 제대로 된 겁니다.
특정 커밋으로 되돌아가기
def error(): name == "Eris" print(f'my name is {Eris}')
name을 초기화할 때 ==로해서
에러가 뜨는 상황입니다.
이퀄 하나를 없애면 되지만 상상력을 발휘해서
우리가 해결법을 모르는 상황이라 " 아몰랑 처음으로 돌아갈 랭"하고 돌아가야 한다면?
ctrl + z를 하면 되겠지만 저 코드가 막 100줄 1000 줄이 되고
ctrl + z로는 해결할 수 없는 상황이라면?
이때 우리는 [reset]을 사용해서 두 번째 커밋을 했던 부분으로 돌아갈 수 있습니다.
일단
git commit -am "third commit in master"
저 말도 안 되는 코드를 커밋해주시고
git log --oneline
91fde14 (HEAD -> master) third commit in master 1485d1f Second commit in master e2a04ce (origin/master) First Commit
전 Second commit 부분으로 돌아갈 거니까
저기서 Second commit 옆에 11485d1f 저걸 복사하겠습니다.
그리고
git checkout 1485d1f
또는
git reset --hard 1485d1f
코드를 확인해보시면
짜잔 우리가 커밋했던 부분으로 돌아왔죠?
reset에 다른 옵션이 있긴 한데
오늘은 hard만 사용할 겁니다.
대충 말해보면 --soft는 코드는 바뀌지 않고 log에 커밋이 지워지는 건데
앞서 말했던 거처럼 ctrl+z의 효과를 사용할 땐 reset --hard가 대표적으로 많이 사용됩니다.
코드도 그 시점으로 돌아오니까요
다시 git log --oneline을 해보시면
1485d1f (HEAD -> master) Second commit in master e2a04ce (origin/master) First Commit
다시 돌아오긴 했는데 커밋 내용도 함께 지워졌죠? 이래서 잘 생각을 하고 해야 합니다.
근데 이렇게 나도 모르게 에러가 생긴 상황이 아니라
내가 뭔가 도전적으로 바꿔보고 싶은데 이게 십중팔구 에러가 날 거 같다!
싶을 때는 Branch를 새로 만듭니다.
Branch
제가 최근에 노 웨이 홈을 보고 와서 그런지
마블에 멀티버스가 브렌치와 일맥상통하는 거 같습니다
쟤도 피터 파커고 얘도 피터 파커인데
얜 다른 세계에서 온 피터고 어쨌든 서로 다른 피터 파커잖아요
브렌치도 마찬가지입니다.
얘도 내 코드고 쟤도 내 코드인데
내 마음대로 지우고 합칠수있는겁니다.
내가 뭔가 도전적이고 아니면 큰일이 날 거 같으면
브렌치(우주)를 하나 만들어서 거기서 작업하고
다른 브렌치에서 끌어올 내용이있다! 하면
merge를 이용해서 기본 브렌치에 합칠 수도 있고
아니면 예상대로 좀 망했다 싶으면 브렌치 삭제해서 없앨 수도 있는 겁니다.
Branch 생성해보기
Branch 생성 : git branch [branchName]
Branch 이동 : git checkout [branchName]
➜ git git:(master) git branch testBranch #testBranch라는 브렌치 생성 ➜ git git:(master) git checkout testBranch #testBranch로 이동! Switched to branch 'testBranch'
touch sub_Wrold.py
sub_World.py라는 파이썬 파일 생성해주고
print("이 파일은 testBranch에서 생성했어요") #sub_World.py
라고 작성 후
def testBranch(n): if n == 10: return print("안녕~") testBranch(n +1) testBranch(1) #index.py
master 브렌치와 구별할 수 있게 index.py에도 다른 내용을 작성했어요
그리고 커밋 후
git checkout master
master 브렌치로 돌아가면?
마법처럼 만들었던 sub_world.py파일은 사라지고
index.py도 그대로 master 브렌치였던 때로 돌아왔어요
정말 신기하죠 이제 막 압축해놓고 그럴 필요가 없습니다.
git을 쓸 줄 안다면
새로 만든 브렌치 Github에 push하고 합치기
다시 testBranch로 가서
git psuh origin testBranch
다시 master로 가서
git merge testBranch
짜잔
master branch인데
testBranch에 내용들이 싹 가져와졌죠
https://github.com/leejw05/learn_git
GitHub - leejw05/learn_git
Contribute to leejw05/learn_git development by creating an account on GitHub.
github.com
728x90'Git' 카테고리의 다른 글
VScode로 Git다루기 (Git graph,Commit) (0) 2022.01.18 [Git] Git으로Github에 코드 업로드해보기 (0) 2022.01.10