dev_beomgeun
꾸준하게 차근차근
dev_beomgeun
전체 방문자
오늘
어제
  • 분류 전체보기 (170)
    • 전공 (0)
      • 운영체제 (0)
      • 알고리즘 (0)
      • 자료구조 (0)
      • 데이터베이스 (0)
      • 네트워크 (0)
    • 개발 공부 (32)
      • 웹 (6)
      • 리눅스 (4)
      • 머신러닝 (1)
      • 스프링 (17)
      • Git (2)
      • AWS (2)
    • 개발 도서, 강의 (3)
      • 스프링 입문을 위한 자바 객체지향의 원리와 이해 (0)
      • 모든 개발자를 위한 HTTP 웹 기본 지식(김영한.. (2)
      • 스프링 부트와 AWS로 혼자 구현하는 웹서비스 (1)
    • 문제 풀이 (118)
      • 백준 알고리즘 (72)
      • 프로그래머스 알고리즘, SQL (38)
      • Hackerrank SQL (8)
    • 프로젝트 기록 (4)
      • 캡스톤 종합설계 (4)
      • 반려하루 프로젝트 (0)
    • 활동 기록 (12)
      • 네이버 부스트캠프 (7)
      • 취준 & 코테 (4)
      • 소프트웨어 마에스트로 13기 (1)
    • 이것저것 (1)

블로그 메뉴

  • 홈
  • 깃허브
  • 링크드인
  • 방명록

공지사항

인기 글

태그

  • 반성
  • dp
  • AI Tech
  • Baekjoon
  • 그래프탐색
  • BFS
  • 프로그래머스 SQL
  • c++
  • 회고
  • 백준
  • 백준 DP
  • 부스트캠프
  • 프로그래머스
  • 스프링
  • 서블릿
  • HackerRank mysql
  • 기록
  • Hackerrank
  • 일기
  • 네이버 부스트캠프

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
dev_beomgeun

꾸준하게 차근차근

[Git] git commit 되돌리기(로컬, 원격)
개발 공부/Git

[Git] git commit 되돌리기(로컬, 원격)

2021. 10. 1. 23:00
728x90

방금 커밋을 날리다가, 잘못해서 build 파일까지 github에 push를 해서 되돌리면서 시도한 해결 방안을 기록한다.


1. git commit 취소하기

- git commit -m "~~"로 로컬에서 git의 내부 인덱스에 파일 및 디렉터리를 저장한 경우

git reset HEAD^

명령어를 통해 전 커밋으로 이동 가능

현재 origin&master의 HEAD가 "Add HelloController, testCode"를 가리키고 있는데 "gitignore 추가" 커밋으로 HEAD가 이동하며 최상단 커밋을 취소하고 커밋한 파일들을 unstaged 상태로 되돌린다. (add 전)

즉, 제일 최근 커밋이 취소된다고 보면 된다.

이후에 커밋 취소한 파일들을 다시 작업을 해서 git commit -m "~~"로 커밋 날리면 된다.

 

- 옵션 설명

git reset -- hard HEAD^ : 위험한 옵션, unstaged 상태 + 작업한 파일들까지 삭제

git reset -- mixed HEAD^ : 기본 옵션이고, 위에서 설명한 것처럼 unstaged상태 + 작업한 파일들 보존

git reset -- soft HEAD^ : 말 그대로 soft, stage 상태 유지 + 작업한 파일들 보존

 


2. git push 취소하기

이게 나의 경우였다. 아무 생각 없이 원격 저장소에 push까지 했는데, 필요 없는 파일들까지 push 돼버렸다.

 

현재 원격 저장소에 "Add HelloController, testCode" 커밋이 push 된 상태.

난 이 커밋을 바꾸고 싶다!

git reset HEAD^

역시 이 reset 명령어로 커밋을 되돌린다.

 

되돌리면, 보다시피 master HEAD가 전 커밋인 "gitignore 추가"를 가리키고 있다.

그리고 파일을 가보면

기존에 커밋을 했던 파일들의 상태가 모두 unstage 상태로 바뀐 것을 확인할 수 있었다.

이 시점에서 잘못된 것, 또는 내가 수정하고 싶었던 내용을 수정하고 다시 커밋을 날려주면 된다.

1. 코드 수정

2. git add (staging)

3. git commit -m "~~"

4. git push origin +master

마지막 4번 명령어인 git push origin +master(+를 붙인다)를 해주면 그대로 원격 저장소에 있던 커밋을 강제로 덮어쓴다.

즉, reset HEAD로 HEAD는 전 커밋으로 가져왔어도, 원격 저장소는 특정 행동을 해주기 전까지 그 커밋 push가 남아있으므로 수정된 커밋을 강제로 덮어써주는 것이다.

조심해야 한다! 특히 같이 작업하는 공간일 경우 코드를 덮어쓰는 것이므로 나중에 충돌이 날 수도 있다.

 

코드 수정 후, add 해주고, 커밋해주고, push origin +master 해준 결과 수정한 커밋(커밋 메시지가 달라진 걸 확인할 수 있다)이 잘 붙은 걸 볼 수 있다.

728x90
저작자표시 비영리 변경금지 (새창열림)

'개발 공부 > Git' 카테고리의 다른 글

[Git] git tag를 통해 release version 관리해보기  (0) 2022.11.17
    '개발 공부/Git' 카테고리의 다른 글
    • [Git] git tag를 통해 release version 관리해보기
    dev_beomgeun
    dev_beomgeun
    백엔드 개발을 하며 얻은 지식과 경험을 공유합니다. 현재 카카오페이에서 백엔드 엔지니어로 일하고 있습니다.

    티스토리툴바