ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Git push 취소 방법 (feat. '쫄보의삽질' 블로그 탄생 배경)
    GIT/GITHUB 2020. 5. 5. 22:57
    728x90

     

     

     

    아래는 저의 생생한 경험담을 바탕으로 작성한 것 입니다.


     

    Github 관리 폴더의 이름을 실수로 변경하고 삭제해버렸다.

    작업 후 commit 하려고 아무리 찾아봐도 폴더가 보이지 않았다.

     

    나의 피땀눈물 그 자체의 폴더가 휴지통에 가 있는 걸 발견하고,

    바탕화면으로 다시 정중히 모셔와서 commit 하려고 봤을 땐,

    해당 폴더 이름이 예전 이름이 아니었기 때문에,

    순간 당황하고 하위 폴더로 git add를 해버렸다.

     

    당연히 깃허브에 올라가있던 파일들의 경로가 바뀌었기 때문에, git add . 후 status를 조회했을 때는

    전체 파일들이 'renamed' 로 되어있었다.

     

     

     

    미래의 나에게 미안할 과거의 나는 '파일 이름'만의 변경은 대수롭지 않다 생각하고,

    아주 cool하게

    매우 지나치게 cool하게

    그대로 commit, push를 했버렸다.

     

    결과는...

     

     

    지난 날의 나의 이력들이 오늘 날짜로 전체 대통일을 이루었다...

    물론 다행히도 commit이력은 살아있었지만,

    나는 그날그날 나의 피땀눈물 노력의 흔적들을 보고 싶었다.

     


     

    그래서 push를 되돌리기 위한 방법을 공유해보려고 합니다.

     

    먼저 2가지 방법이 있는데, reset과 revert입니다.

     

    reset: 되돌리고 싶은 시점의 commit이력으로 돌아가는 것(시간여행)

    revert: 현재까지 남긴 이력들을 유지한 채 되돌리고 싶은 commit을 원상복귀시키는 것(복구commit이 추가됨)

     

    저는 혼자 사용하는 원격 저장소이기 때문에 reset을 사용했습니다.

    하지만 누군가와 공유를 하고 있다면, 다른 사람이 그 사이에 pull을 받았을 수도 있기 때문에,

     

    그러면 내가 되돌리기를 했을 때 문제가 생일 수 있으므로, reset 하기 전에 충분한 커뮤니케이션이 필요하다고 합니다.

    그래서 revert를 많이 사용한다고 합니다.

     

     

    1. commit 이력 조회하기

    git log --oneline

    해당 명령어로 그동안의 commit들을 확인해볼 수 있습니다.

     

     

    HEAD가 있는 곳이 현재 브랜치(마스터)를 가리키는 포인터입니다.

    그리고 이 브랜치는 가장 최근의 commit을 가리킵니다.

     

    2. 돌아가고 싶은 commit 이후의 commit 삭제하기

    여기에서 돌아가고 싶은 commit을 찾아서 git reset를 실행합니다.

     

    reset hard를 쓰면 돌아가려는 이력 이후의 모든 내용은 지워버리겠다는 것입니다.

    => 원격 저장소와 로컬의 상태가 서로 달라도 강제 push 하는 경우

     

    과거 이력만 지우고 이후에 stage에 올려놓은 것으로 바로 commit 하고 싶다면, reset soft를 쓰면 됩니다.

     

    git reset --hard "해당commit"

    * 주의! 현재까지의 작업을 모두 commit 한 전제하에 할 것! reset과 동시에 모두 다 날라감

    (저는 앞전의 잘못 commit한 이후 작업이 없었습니다.)

     

     

    그러면

     

     

    좀 전의 commit이 사라지고 되돌리고 싶은 commit으로 돌아왔습니다.

    이제 이 commit에는 그 당시 제가 stage에 올라온 파일들을 묶어서 제 로컬에 저장해 놓은 '기억'이 있습니다.

     

    3. github 원래대로 돌려놓기

     

    * push에는 force push가 있습니다.

    원격 저장소 상태와 상관없이 지금 나의 로컬 상태를 강제로 반영하고 싶은 경우 => 협업의 경우 동료의 작업을 다 날릴수도 있음!!

    (저는 이렇게 해결했지만,  -f는 절대 함부로 쓰면 안 된다고 합니다. 대참사가 일어날 수도 있습니다.)

     

    저는 혼자하는 작업이었고, 중간에 로컬에서 하던 작업이 없었기 때문에 강제로 이전 작업으로 되돌리는 force push를 사용했습니다.

     

    따라서 아래 명령어로 force push를 해주면,

    git push -f origin master

     

     

     

    쨘! 깔끔하게 원래 날짜들로 돌아간 모습을 보실 수 있습니다.

     

     

    이상 저의 삽질일기를 마칩니다!

     


    여기저기 삽질도 해보고

    날려도 먹으면서

    배우는 게

    결국 남는거다

    - Z.Sabziller


     

     

    '쫄보의삽질' 블로그에 대한 TMI: 

     

    저는 5살 때부터 비행기를 타고,

    어려서부터 놀이공원에 가면 회전목마는 눈길도 주지 않은 채 범퍼카만 주구장창 탔으며,

    스무살 되던 해 바로 운전면허를 땄고,

    제일 좋아하는 영화는 fast&furios(분노의 질주)입니다.

     

    제 20대 버킷리스트 1번에는 스카이다이빙(이미 달성했습니다!)이 입주해 있을 정도로

    원래 겁도 없고 그렇게 쫄보도 아니며 나름 강심장(?)이라고 생각했는데

     

    이번 일을 통해 저의 이전 작업 내역들을 다시는 못 돌릴까 봐

     

    아무것도 못만지고 조마조마하며 떨고 있는 제 자신에게서

    너무나도 낯선 '쫄보'의 모습을 볼 수 있었습니다.

     

    그렇게 해서 이 블로그는 탄생했습니다.

     

    왜냐하면 개발을 하는 데 있어 이러한 쫄보 기질은 별로 도움이 안 된다고 생각합니다.

    여기저기 삽질도 해보고 날려도 먹으면서 배우는 게 결국 남는거라고 생각합니다.

     

    비록 쫄보이지만, 열심히 삽질하며 삽질일기 를 남기는 쫄보삽질러의 블로그 입니다.

     

    댓글

Designed by Tistory.