일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Vue.js
- rust 기초
- ambiguous function description
- 스마트 컨트렉트 함수이름 중복
- ethers websocket
- ethers typescript
- 러스트기초
- 스마트컨트렉트프록시
- nest.js설명
- 스마트컨트렉트 함수이름 중복 호출
- ethers v6
- chainlink 설명
- git rebase
- multicall
- SBT표준
- ethers type
- ethers
- 컨트렉트 배포 자동화
- 티스토리챌린지
- 러스트 기초
- 프록시배포구조
- 스마트컨트렉트 예약어 함수이름 중복
- 스마트컨트렉트테스트
- 체인의정석
- 머신러닝기초
- 러스트 기초 학습
- 컨트렉트 동일한 함수이름 호출
- 오블완
- Vue
- vue기초
- Today
- Total
체인의정석
git에서 원격 저장소에 있는 커밋 되돌리는 방법 정리 본문
깃허브의 원격 저장소에 만약 잘못된 내용이 올라갔는데 이를 되돌리고 싶다면 어떻게 해야할까?
1. 기록안남기고 되돌리는 방법
먼저 되돌리고 싶은 커밋 수 또는 위치만큼 로컬에서 커밋을 되돌려 주어야 한다.
git reset --hard HEAD~3
이렇게 하면 3번째 커밋 전까지 되돌아가며
git reset --hard HEAD~1
이렇게 하면 최근 1개의 커밋 이전으로 돌아간다.
이렇게 하면 기록 자체가 남지 않게 된다.
이 경우 다시 push를 하면 pull이 다시 뜨게 되면서 최신이 아닌 상태에서 업데이트가 되게 되므로 push를 강제로 한번 실행시켜 주어야한다.
git push -f origin master
위와 같은 명령어를 사용하면 강제로 푸시가 되므로 이전 상태로 강제로 되돌릴 수 있다.
이때 push -f 는 위험하므로 브랜치를 하나 더 만들어서 복제본을 만든 후에 진행을 해야 한다.
또한 한번에 뒤로 되돌리지 않을경우 (예를 들어 2번 뒤로 되돌리려는 경우)
해당 명령어를 2번 연속으로 쓰면 만약 이전 커밋이 머지였다면 2번째 전으로 되돌아가지 않는다.
git reset --hard HEAD~1
git reset --hard HEAD~1
따라서
git reset --hard HEAD~2
이렇게 해야 하며
더 안전한 방법은 다음과 같이 commit id를 먼저 검색한 뒤에 그 뒤에 지정해서 해당 커밋으로 되돌리고 push f를 해야 한다.
git reflog
2. 기록 남기고 되돌리는 방법
그러나 여러명이 작업하여서 되돌리는 것 자체도 기록으로 남겨야 한다면?
git revert (commit hash)
이렇게 git revert 뒤에 커밋 해시 값을 가져와서 시켜주면 되돌리는 것 자체도 기록에 남는다고 한다.
그리고 기록이 너무 많이 넘는게 싫다고 하면
git revert --no-commit (commit hash)
이렇게 하면 커밋 기록이 해당 부분에는 하나만 남는다고 한다.
그러나 각 해시를 일일히 처리하는 것이 번거로울 수 있으므로 이를 한번에 적용시키는 방법은
git revert --no-commit HEAD~3..
이런식으로 하면 된다고 한다.
만약 팀원들과 합의가 되어 있거나 특정 시간대에 혼자 쓰는 상황이라면 전자를 다같이 쓰는 상황이라면 후자를 선택하면 된다.
(물론 가장 깔끔한건 브랜치를 나눈 후 PR요청을 날려서 병합하는 것이다.)
'개발 > git' 카테고리의 다른 글
git rebase로 소스 코드 수정사항 반영하기 (0) | 2023.06.16 |
---|---|
git submodule에서 풀 받고 나온 파일 없애는 법 (0) | 2023.06.16 |
ssh 키 생성 후 github/bitbucket 연결하는 법 (0) | 2023.05.18 |
git stash 명령어, 차이보기 (0) | 2023.03.16 |
git dev에서 스테이징 환경으로 수동 배포하기(git diff, git merge, ssh) (0) | 2023.02.09 |