1. 로컬 레포지토리의 커밋과 리모트 레포지토리의 커밋이 다른 경우
서로 다른 개발자에 의해서 다른 내용이 커밋되는 경우가 있다.
이럴 경우는 로컬 레포지토리에서 git push를 해도 에러가 발생한다.
우선 git pull을 하게되면 conflict가 된다.
git pull을 하게 되면 리모트 레포지토리의 커밋과 로컬 레포지토리의 커밋과 머지를 하게 된다.
기존 conflict 해결방법과 같이 해결하면된다.(파일 수정)
2. git fetch
git pull은 머지를 하게 되는데 git fetch는 가져오는 단계까지만 진행된다.
리모트 레포지토리에 있는 브랜치의 내용을 일단 가져와서 확인한 후 머지하고 싶을 때 사용
git fetch로 리모트 레포지토리를 가져온 다음
git diff 로컬브랜치 origin/리모트브랜치 >> 로 내용 확인
리모트 레포지토리의 브랜치에 문제가 있을 때 해결방법
1. 잘못된 코드를 추가한 개발자에게 리모트 레포지토리 수정 요청
2. 잘못된 부분 수정하고 다시 git push 하기
2-1 git merge origin/리모트브랜치
3. 코드 작성자 확인하기
git blame 파일이름
또는 git show 커밋아이디
4. Remote Repository에 올라간 커밋 이전으로 되돌리기
git revert 커밋아이디
실행하면 커밋메시지를 입력한다.
revert는 하나의 커밋을 추가하는 과정이기 때문에 remote repository보다 최신 버전이 된다.
5.여러 커밋 취소하기
git revert 시작전커밋아이디 완료할커밋아이디
시작전커밋아이디를 제외하고 완료할커밋아이디 까지 revert를 실행한다.
/// git 자유자재로 사용하기
6. git reflog
head가 가리켜왔던 커밋들을 보여줌
reset으로 이전 커밋의 아이디를 확인하지 못할 때 사용할 수 있다.
7. 모든 브랜치 보기(--all), 커밋 히스토리에서 각 브랜치와의 관계가 보이게 하기(--graph)
git log --pretty=oneline --all --graph
8. 깔끔한 커밋 히스토리를 원할 때
git rebase 불러올브랜치
conflict가 발생했을때는 conflict 수정후 git add 후에
git rebase --continue (컨플릭트가 발생해서 제대로 진행되지 못한 리베이스를 계속 진행하라는 의미)
merge와 rebase의 차이
rebase는 새로운 커밋을 만들지 않는다.
rebase로 만들어진 커밋 히스토리가 더 깔끔하다.
결과는 똑같다. 커밋 히스토리만 바뀔뿐
9. 작업 내용 임시 저장하기(작업 도중 커밋을 하지 않은채로 다른 브랜치로 이동할 때 등등 필요하다)
git stash
working irectory에서 작업하던 내용을 stack(filo) 보관한다
git stash list /// stash 확인하기
git stash apply /// stash 내용을 불러온다
git stash pop (stashid) >>> 많이 사용한다 /// stash 적용과 동시에 삭제
git stash drop /// 가장 최근의 stash 삭제
git stash drop stash아이디 /// 지정한 stash 삭제
10. 잘못된 브랜치에서 작업하고 있었을 때
git stash로 저장 후
옮겨 갈 브랜치에서 git stash apply 스태시아이디
conflict가 발생하면 conflict를 수정해준다
11. 다른 브랜치의 필요한 특정 커밋을 가져오고 싶을 때
git cherry-pick 커밋아이디
12. git이 무시하는 파일
.gitignore
버전관리를 할 필요가 없는 파일을 설정해서 용량 관리, 가독성에 도움이 되게 한다.
'학습 > git' 카테고리의 다른 글
[Git]branch, merge (0) | 2023.10.25 |
---|---|
[Git]Github와 commit (3) | 2023.10.25 |
[Git]Git 작업 영역 및 파일 상태 (0) | 2023.10.24 |
[git]git과 github, repository와 commit (1) | 2023.10.23 |