Doby's Lab

[깃허브/Github #1] 깃허브, 강제 커밋은 어떻게 해결할까? 본문

카테고리 없음

[깃허브/Github #1] 깃허브, 강제 커밋은 어떻게 해결할까?

도비(Doby) 2021. 7. 23. 14:23

깃허브에 새로운 커밋을 하다보면

'git push origin master'라는 명령어에 대해 궁금증이 생긴다.

[git push origin +master를 통해 강제 커밋을 해야하는 경우]

git push origin +master는 꽤 위험하다.

강제 커밋을 하면 기존의 데이터가 날아가는 경우가 발생할 수도 있기 때문이다.

그렇다면 강제 커밋을 하지 않고 커밋을 하는 방법은??

 

이 궁금증을 해결하기 위해 test 리포지토리와 test commit을 해두었다.

dldld

1. 테스트용 파일 생성
2. 테스트 파일 내부에 테스트용 텍스트 파일 생성
3. 테스트용 리포지토리 생성
4. 깃허브에 테스트용 파일 커밋
5. master branch에 커밋이 된 것을 확인 할 수 있음

여기서 커밋 에러를 발생 시키기 위해 다음과 같이 해주었다.

1. 깃허브에서 텍스트 파일 수정
2. 커밋을 위해 텍스트 파일 하나 더 추가
3. git push origin master의 에러 발생

커밋을 하기 위해 파일 하나를 더 만들고, 깃허브에서 커밋해두었던 파일을 수정하고

커밋을 하면 다음과 같이 에러가 발생한다.

 

그렇다면 에러의 발생 원인이 무엇일까?

바로 코드 간의 충돌이다.

 

생각을 해보면 깃허브의 텍스트 파일 수정

Hello, World
Bye, World Bye Bye

원래 파일에서의 텍스트 파일

Hello, World

이 둘은 같은 파일이지만 내용이 달라서 충돌이 발생하는 것이다.

해결하는 법은 pull을 이용한다.

깃허브에 올라가있는 파일을 받아와서

pc에 있는 파일과 merge(병합)되어 덮어씌어진 것처럼 된다.

1. git pull origin master

이때 vi편집기가 켜져서 당황했지만 :wq를 입력하여 종료해주었다.

2. vi 편집기

master 브랜치를 merge(병합)하라는 메시지인 거 같다.

pull이 된 것을 확인

pull을 이용하여 깃허브에서 수정한 내용을 잘 받아온 것을 확인할 수 있다.

 

지금까지 내용을 소스트리를 통해 정리해보겠다.

소스트리 그래프

우선 'modified text commit'과 'Update commit_test_text.txt' 커밋은 무시를 해야한다.

오류를 내기 위해 테스트를 하다가 실패한 커밋이다.

'second test commit'도 무시해도 좋다.

(첫 포스팅이라 그런지 실수가 좀 잦다..)

그럼 봐야 할 것은

1. first test commit

2. Update commit_test_text.txt

3. master, origin/master Merge branch....

이다.

1번에서 테스트를 하기위해 커밋을 해주었고,

2번을 통해 깃허브에서 파일을 수정해주었다.

차후에 커밋을 하니 강제 커밋이 필요하다는 메시지가 떴고,

pull이라는 해결책을 찾아 pull을 해준 다음 기존의 pc 파일과 merge되었다.

merge된 내용이 3번이다.

 

이것으로 강제 커밋은 git push origin +master을 통해 해결할 수 있지만

데이터 손실이라는 큰 위험 부담을 안고있기 때문에 다음과 같이 해결 할 수 있다.

 

그렇지만 강제 커밋이 필요하다는 메시지는 다른 이유에서도 발생했던 것을 기억할 수 있었다.

다음 내용은 차후에 발생하게 되면 포스팅을 하도록 하겠다.

(큰 이유가 아니라면 수정이나 댓글을 통해 이야기 하겠다.)

728x90