ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Git] commit(reset,Checkout,merge)과 Branch
    Git 2022. 1. 12. 00:49
    728x90

    [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
Designed by Tistory.