728x90
git 은 어렵다. git 을 사용하다 보면 되돌리고 싶은 순간들이 많이 발생하는데, 이러한 실수를 되돌리는 방법을 찾는건 너무 복잡하다. 그리하여 작성한 깃과 좀더 친해지길 바라...⭐️
이런, 뭔가 단단히 잘못됐는데, 다 뒤엎고 예전으로 돌리고 싶어!
# 모든 브랜치의 기록을 볼 수 있다.
# 각각 HEAD@{index} 형태로 index 를 가지고 있으니, 잘못되기 전에 해당하는 index 를 찾고
git reflog
# 타임머신을 타자!
git reset HEAD@{index}
이 기능은 실수로 지운 파일을 되돌리거나, 뭔가 잘못 수정한걸 되돌리거나, 실수로 머지한걸 되돌리거나, 다됐고 그냥 잘 동작하던 때로 되돌리고 싶을때 사용하면 된다.
이런, 방금 커밋했는데 하나 깜빡했어!
※ 주의: 이 기능은 반드시 아직 로컬에만 있는 커밋에 사용해야 한다. 이미 원격 저장소에 push 된 커밋은 절대로 수정하면 안 된다.
# 새로 바뀐 파일들을 add 하고
git add .
# 마지막 커밋에 바뀐 파일이 등록된다.
git commit --amend --no-edit
커밋을 하고나서 테스트/린터를 돌렸더니...아 이런, 오타가 난걸 커밋했네. 와 같은 상황에서 사용하는 기능이다. 새로 커밋을 하고 rebase -i 를 이용해서 두 커밋을 squash 하는 것도 가능하지만, 이 방법이 훨씬 더 빠르다.
이런, 커밋 메시지를 잘못 썼어!
git commit --amend
이런, 다른 브랜치에 커밋해야 하는걸 실수로 main/master 브랜치에 커밋해 버렸어!
※ 주의: 이미 원격 저장소에 push 했다면 슬프게도 이 방법은 소용 없다.
# 현재 main/master 상태로 새로운 브랜치를 만든다.
git branch some-new-branch-name
# main/master 브랜치의 마지맛 커밋을 제거한다.
git reset HEAD~ --hard
# 여러개의 커밋을 했을 경우엔,아래 command 를 사용하면 된다.
git reset HEAD@{돌아갈 커밋 개수}
# 아래 브랜치에는 해당 커밋이 남아있다.
git checkout some-new-branch-name
이런, 실수로 이상한 브랜치에 커밋해 버렸어!
# 마지막 커밋은 취소하되, 변경된 사항은 남겨둔다.
git reset HEAD~ --soft
git stash
# 올바른 브랜치로 이동
git checkout name-of-the-correct-branch
git stash pop
git add .
git commit -m "Commit message"
이런, diff 를 실행했는데 왜 아무것도 안보이지?
분명히 뭔가를 수정했는데 diff 의 결과가 아무것도 나타나지 않는다면, 아마도 add 를 실행해서 파일을 staging 상태로 만들었을 가능성이 높다. 이 경우에는 옵션을 줘야 한다.
git diff --staged
이런, 예전에 한 커밋으로 되돌려야 하잖아?
# 되돌려야 할 커밋을 찾는다.
git log
# 해당 커밋의 hash 를 기억한다.
git revert {saved hash}
옛날 커밋을 일일이 찾아서 예전 파일 내용을 복사-붙여넣기 할 필요가 없다.
이런, 파일 수정한걸 되돌려야 하잖아?
# 해당 파일이 수정되기 전의 커밋 hash 를 찾는다.
git log
# 해당 커밋의 hash 를 기억한다.
git checkout [saved hash] -- path/to/file
git commit -m "Wow, you don't have to copy-paste to undo"
아 몰라. 그냥 다 포기하고 새로 만들래!
cd ..
sudo rm -r fucking-git-repo-dir
git clone https://some.github.url/fucking-git-repo-dir.git
cd fucking-git-repo-dir
레포지토리 다시 받기를 이용한 방법이 아닌 git 명령어를 이용하여 초기화하고 싶다면
git fetch origin
git checkout main
# 추적되고 있지 않은 파일/폴더를 모두 삭제한다.
git reset --hard origin/main
# 초기화하고 싶은 각 브랜치에 대해 checkout, reset, clean 을 반복하면 된다.
git clean -d --force
728x90
'Git' 카테고리의 다른 글
[Git] Markdown Badge 만들기 (0) | 2025.01.02 |
---|---|
[Git] git add / git commit / git push 취소하기 (0) | 2021.09.06 |
[GitHub] Personal access token 설정하기 (0) | 2021.08.17 |
[Git] 오픈 소스 라이센스 선택하기 (0) | 2021.05.26 |
[Git] commit 했는데 contribution 그래프가 안채워지는 경우 (0) | 2021.05.09 |