1. Git push 전에 Git pull을 해야하는 경우가 많은 경우
우선 premium branch에서 License파일을 수정하고 커밋한다.
이제 리모트 레포지토리(Github)의 premium branch를 들어가 License를 바꿔준다.
로컬 레포지토리와 리모트 레포지토리가 서로 가리키는 내용이 다르다
한 프로그램을 각각 다른 개발자가 각기 다른 방식으로 개발한 것이다.
협업할 때 굉장히 자주 일어나는데,
내가 개발하는 동안 다른 개발자가 로컬 레포지토리에서 개발후에, git push를 해서 내 premium 브랜치와는 다른 코드를 보인다.
이 상황에서 git push를 하면?
당연히 안된다! 다른 개발자가 열심히 개발한 내용을 덮어 써서 아예 지워버릴 수 있기 때문에
해결법
1.git pull을 한다.
에러메시지가 나올텐데, 당연히 내용이 다르니 Conflict가 발생한다는 것이다.
근데 왜 merge conflict일까?
git pull을 하면 리모트 레포지토리의 premium 브랜치에 있는 내용을 그대로 가져와서 로컬 레포지토리의 premium 브랜치로 가져오고,
그리고 그것을 그대로 merge한다. 즉, 최신 내용을 그대로 가져와서 merge하는 과정까지가 pull 이다.
그러니 Conflict를 해결하자
어느 파일에서 문제가 났는지 확인하고
두개 모두 필요하니 오른쪽 처럼 바꾸고 저장해준다.
그 뒤 git add . / git commit 하면 커밋 메시지 창이 뜬다.
git history를 보면 잘 추가가 되어있으니
이제 git push를 하자!
Github에서 확인해보면, 잘 push 되어있다!
2. git pull 말고 git fetch 를 사용하는 법
git pull = git fetch + merge
"merge 까지 해주는 pull 말고 가져오기만 하고싶어" => git fetch 사용하기
리모트 레포지토리에 있는 브랜치의 내용을 일단 가져와서 살펴본 후에 머지하고 싶을 때 사용!!
다른 사람이 (혹은 자신이) 잘못된 방향으로 바꿨을 수 있잖아요.
누가 이렇게 1$로 바꿔놨다고 하면????
git fetch로 가져오고,
git diff premium origin/premium로 차이점을 비교해보자
해결 방법!
1. 잘못된 코드를 추가한 개발자에게 함수를 지우고 다시 리모트 레포지토리에 올려달라고 하기
- 실제로 그 개발자의 생각이 있을 수 있으니
2. 잘못된 부분을 알아서 해결하고 다시 git push 하기
-> 그 개발자에게 반드시 알려주어야 의 상하는 일이 없다!
누가 내 코드를 옮겼을까?
git blame (원하는 대상)
git blame classification.py를 실행시켜보면
이력들이 나온다.
git show로도 확인할 수 있는데,
git show (commit아이디) 를 하면 Author 부분에 누가 작성했는지 알 수 있다.
이미 리모트 레포지토리에 올라간 커밋을 취소하기
이렇게 바꾸고 커밋을 하고 push 까지 했는데, 갑자기 comic 기능을 유료버전에서 빼자는 말이 나왔다면
comic을 빼고 다시 commit을 해도 되지만,
이 과정을 한번에 해주는 커맨드가 있다!!! git revert (커밋아이디): 되돌리다
'Programming > Git' 카테고리의 다른 글
Git flow 전략 도입기 (0) | 2024.05.23 |
---|---|
[Git] git pull 충돌 에러 (Your local changes to the following files would be overwritten by merge) (0) | 2023.11.16 |
Git Branch 다루기 (생성, merge, conflict, remote repository) (0) | 2023.01.11 |
Git commit 다루기(히스토리, 수정, 생성, reset) (0) | 2023.01.11 |
Github 사용법(local 레포지토리 github에 올리기, remote, fork) (0) | 2023.01.11 |