320x100
최근 업데이트 2020-06-02
원격저장소에서 커밋 히스토리 제어( reset/revert )
1. Reset 후 강제 push하기
Git에서 작성한 커밋들을 되돌리고 싶을 때, 아직 원격저장소로 push 하지않은 경우에는들을 기반으로 작성되 $ git reset {commit_id}
으로 원하는 상태로 원상복구할 수 있지만, 아래 이미지처럼 이미 원격저장소로 push 해버린 경우에는 로컬에서 커밋을 되돌린 후에 강제로 push를 해야한다. 예로 아래 이미지처럼 HEAD에서부터 세 개의 커밋을 완전히 제거할 수 있다.
1-1. 로컬에서 되돌리고 싶은 커밋으로 간다
- 아래 명령문을 여러번 실행하면서 원하는 커밋상태로 간다.
HEAD^
으는 바로 아래 커밋으로 되돌리게 되고,HEAD~3
와 같이 하게 되면 헤에서부터 최근 3개 아의 커밋으로 되돌리게된다.
$ git reset --hard HEAD^
1-2. 강제로 푸쉬하기
- 원하는 상태의 커밋으로 돌아왔다면, 그 상태로 강제 푸쉬를 한다.
-f
는 또는--force
강제로 푸시함 의미한다.
$ git push -f origin master
1-3. 주의사항
위의 방법은 커밋 히스토리를 강제로 조작한다는 점에 있어서 팀과 공유하는 원격저장소라면 타격이 있을 수 있다.
- 본인 혼자서 작업하는 경우
- 위의 방법으로 강제로 되돌린 커밋을 pull한 팀원이 없는 경
만약 위의 작업을 모르고 팀원이 작업 후 push한다, 내가 강제로 삭제했던 커밋들 다시 생성된다.
2. Revert 후 강제 푸쉬하기
1번의 경우, 커밋사항들을 전체적으로 삭제한 후 덮어쓰기가 되기때문에, 히스토리가 조작된다는 위험이 있다.
되돌렸다는 걸 히스토리에 남기기 위해서는 아래와 같이 revert를 하여 과거 커밋으로 돌릴 수 있다.
2-1. 되돌리고 싶은 커밋으로 간다
$ git revert [되돌리고 싶은 commit의 hash]
또는 되돌리고자하는 커밋을 한 번만 생성하고 싶을 때
$ git revert --no-commit [되돌리고 싶은 commit의 hash]
여러 커밋을 한꺼번에 돌리고 싶을 때
$ git revert --no-commit HEAD~3..
2-2. 되돌리고 싶은 커밋으로 간다
Revert한 변경사항들을 커밋한다.
$ git commit -m 'Revert "Commit C, B, A"'
1-2. 푸쉬하기
$ git push origin master
반응형
'Developer > GitHub' 카테고리의 다른 글
git add 에러 warning: LF will be replaced by CRLF 해결방법!! (0) | 2020.10.08 |
---|