본문 바로가기

Git

(7)
commit --amend, rebase -i로 수정 시, git push --force 할 경우 'You are not allowed to force push code to a protected branch on this project.' 에러 발생 시 조치 GitLab에서 'Allowed to force push'를 허용해줘야 한다. Project > Settings > Repository > Protected branches Allowed to force push를 허용
과거 커밋들을 수정, 삭제, 병합, 분할하는 rebase -i git rebase -i 명령어 설명 p, pick 커밋 그대로 두기 r, reword 커밋 메시지 변경 e, edit 수정을 위해 정지 d, drop 커밋 삭제 s, squash 이전 커밋에 합치기 Sourcetree에서 사용하기 수정하려는 커밋들의 부모 커밋에서 Rebase children of interactively... 버튼을 클릭 Edit Message : 커밋 메시지 변경 Squash with previous : 이전 커밋에 합치기 Delete : 커밋 삭제 ↓↑ 버튼 : 커밋 위치 위, 아래 이동
커밋을 수정하는 commit --amend commit --amend가 필요한 상황 커밋 메시지를 바꾸고 싶을 때. 이전 커밋의 파일을 수정하고 싶을 때. 이전 커밋에 파일을 추가하고 싶을 때. 커밋의 불변 속성 커밋을 수정해도 실제로는 새로운 커밋이 하나 생성되어 바뀌는 원리로 수행된다. 커밋 메시지 변경 아래 명령어로 에디터를 열어 커밋 메시지를 변경한다. git commit --amend 커밋 메시지 한 줄로 변경 git commit --amend -m '원하는 메시지' 원격에 저장된 커밋을 수정하는 상황 커밋을 수정해도 실제 새로운 커밋이 생기는 것이기에 일반적으로 push는 불가능하다. 원격 저장소인 'origin'과 로컬 저장소인 'main' 브랜치의 커밋이 서로 달라졌기 때문에 충돌이 일어난다. 이 경우 강제 push 명령어를 통해 ..
브랜치를 다른 브랜치에 이어붙이는 rebase 한 줄로 깔끔히 정리된 내역을 유지하기 원할 때 적합한 브랜치를 합치는 방식이다. 'branch' 브랜치를 'main' 브랜치로 rebase하는 방법 1. 'branch' 브랜치로 이동한다. 2. rebase 명령어 입력. git rebase main 3. 'main' 브랜치로 이동 후 'branch'의 시점으로 fast-forward. git merge branch 4. 'branch' 브랜치를 삭제한다. rebase 주의 사항 원격 저장소에 push한 브랜치는 rebase하지 않는 것이 원칙이다. 가급적 rebase는 아직 원격에 존재하지 않는 로컬의 브랜치들에만 적용하자. 그래도 원격 저장소에 push한 브랜치에 rebase를 적용한다면... rebase는 이력을 조작하는 행위기 때문에, 일반 pu..
전체 Git Repository가 아닌 일부 특정폴더의 파일들만 이전 버전으로 돌리는 방법 (Reset With a Path) 1. 상황 우리 회사는 각각의 프로젝트를 빌드한 모듈들을 하나의 패키지로 만든다. 이런 모듈들을 모은 패키지를 하나의 Git Repsitory로 버전관리를 하는데 패키지를 만들어 테스트를 하던 도중 버그가 발견되어 특정 모듈만 수정이 필요하였다. 특정 모듈 프로젝트를 수정하고 빌드하여 패키지 파일을 수정할 때 배포 자동화 스크립트 동작을 위하여 수정이 필요한 모듈의 파일만 이전 버전으로 되돌릴 필요가 있었다. 여러 모듈들이 동시에 수정된 내용이 하나의 커밋으로 반영이 된 상황이었다. 그리고 이 커밋의 내용 중 일부는 남기고 일부는 이전 커밋으로 돌려야 할 필요가 있었다. 이럴 때 어떤 Git 명령어를 사용하면 될지 찾아보았다. 2. 실행해야 하는 명령어 아래의 두 명령어를 실행하여 특정 폴더만 이전 버전..
Git 서버 IP를 변경하였을 때 Submodule을 받아올 IP가 변경이 안되어 Pull 받을 때 에러 발생할 경우 해결한 방법 서브모듈을 사용하면 .gitmodules 파일이 만들어지고 이 프로젝트를 Clone 하는 사람은 이 파일을 보고 어떤 서브모듈 프로젝트가 있는지 알 수 있다. .gitmodules 파일 - 서브 디렉토리와 하위 프로젝트 URL의 매핑 정보를 담는 설정 파일 [submodule "SubmoduleExample"] path = SubmoduleExample url = http://192.168.0.131:8080/myoungmin/SubmoduleExample 아래와 같이 Clone을 받을 IP를 변경해서 명령을 해도 .gitmodules URL을 갱신하지 않아서 git clone --progress -v "http://192.168.0.114:8080/myoungmin/GitExample.git" "C:\..
Git Commit Message 수정하기 Sourcetree에서 Terminal 아이콘을 누르면 현재 git 저장소에 해당하는 터미널 창으로 이동 1. 마지막 Commit 메시지 수정하기 1) git commit --amend -m "바꿀 메시지" 2) git commit --amend --amend까지만 입력 후 vi 터미널에서 메시지 수정후 :wq로 저장 2. 마지막 Commit 메세지가 아닌 것 수정하기 rebase 명령어를 사용 --> 깔끔한 커밋을 남길 수 있도록 도와주는 명령어 git rebase -i HEAD~5 HEAD~5 은 최근 커밋 메시지중 5개만 불러온다 메시지를 수정하고 싶은 Commit 내역의 pick을 reword로 바꾸고 (‘i’키를 누르면 insert로 바뀐다음 수정, i를 누르면 엔터를 입력할 필요없이 바로 in..