Algorithm 저장소를 새로 만들게 되면서 기존 저장소를 합치고 싶었다... (내 아깝고 소중한 커밋들...)
그러다보니 알게된 명령어들을 가볍게 정리해보려한다.
가장 마지막 commit의 날짜를 변경할 때
git commit --amend --no-edit --date "$(date)"
git commit --amend --no-edit --date "Sun 30 Aug 2020 01:39:00 KST"
전자는 오늘 날짜, 현재 시각으로 변경할 때. 아래는 특정 날짜, 시간으로 변경할 때의 명령어 이다. "날짜 시간" 정도로 보면 된다. KST는 한국 기준시간이라는 의미이다. 해당 명령어로 날짜를 변경해서 github 잔디를 채우는 꼼수를 쓸 수도 있긴 하다.
가장 마지막 commit의 저자 author를 변경할 때
git commit --amend --author "username <email>"
예전에 회사 계정과 github을 연결 시켜놓고, global 계정도 회사 계정으로 되어있다보니까 회사를 그만두고 github과 연결을 해제했더니 커밋이 사라졌었다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋ그래서 오잉 이게 뭐지?하다가 찾아낸 방법이다.
특정 commit의 저자, 커밋 내용, 날짜 등을 변경할 때
git rebase -i "<commit>"
<commit>에 해당하는 것은 해당 commit의 해시 값을 넣고 검색하여 수정할 수 있다.
해당 명령어를 입력하면 vi 편집기가 나타나는데 해당 commit을 pick하고 :wq(종료)를 한다.
그 뒤에 git commit --amend를 사용하여 수정할 수 있다. 추가로 수정할 커밋이 있다면 git rebase --continue를 사용하면 된다.
수정 후 push할 때 (강제 push)
git push -f origin master
-f는 force 명령어로 해당 수정 사항과 충돌하는 기존 기록을 무시하고 이 기록으로 덮어쓰기 하겠다는 의미이다. (-f대신에 --force를 써도 된다)
만약 rebase 이후에 그냥 push를 시도할 경우(force 명령어를 사용하지 않는 경우) merge를 하라며 push가 되지 않는다. 하지만 이전 기록을 무시한다는 것은 위험한 시도이기 때문에 주의해서 사용할 것!
git log 파일을 text로 저장하는 명령어
git --no-pager log > log.txt
두 개의 저장소를 하나로 병합할 때
cd path/to/parent
git remote add -f child path/to/child
git merge --allow-unrelated-histories child/master # or whichever branch you want to merge
git commit -m "Merge child project"
git remote remove child
parent 저장소에 child 저장소를 합칠 때는 다음과 같다. 애초에 저장소를 합치는 것 자체는 그냥 파일만 이동해도 되니까 이 시도는 사실상 기존 저장소의 기록을 살리기 위한 것이다.
두 개의 저장소를 하나로 병합할 때 (하나의 저장소를 하위 디렉토리로 병합하고 싶을 때)
cd path/to/parent
git remote add -f child path/to/child
git merge --allow-unrelated-histories child/master # or whichever branch you want to merge
git read-tree --prefix=폴더 이름/ -u child/master
git commit -m "Merge child project"
git remote remove child
다만 여기에서 문제가 된 것은 github에서 파일의 위치 이동을 파일을 지우고 새로 만든 것으로 인식한단 점이었다..
그러나 해결 방법이 아직까지는 없다고 한다. github은 content를 기준으로 tracking 하기 때문이라고 ㅠㅠ
결과적으로 직접 log 파일을 저장해서 새로 커밋하고 커밋의 날짜를 변경하는 방식으로 저장소를 합쳤다. (+기존 기록도 옮겨옴)
결국 노가다로 완성했지만 일단 다양한 git 명령어를 알게된 것 같아서 신기했다~!
참고 자료
https://lumiloves.github.io/2018/06/25/how-to-preserve-file-history-when-renaming-or-moving-in-git
https://stackoverflow.com/questions/10330425/how-do-i-export-a-git-log-to-a-text-file
'Algorithm' 카테고리의 다른 글
[백준 16985] Maaaaaaaaaze (0) | 2020.09.06 |
---|---|
[백준 17144] 미세먼지 안녕! (0) | 2020.08.24 |
[백준 14503] 로봇 청소기 (0) | 2020.08.23 |
[백준 16000] 섬 (0) | 2020.08.08 |
[백준 19236] 청소년 상어 (0) | 2020.07.30 |
댓글