1. 패치 (fetch)
원격에 있는 저장소의 정보를 가져와서, 로컬에 있는 저장소의 정보를 갱신합니다
로컬 브랜치는 영향을 받지 않습니다.
변경되는 것은 로컬 저장소입니다
2. 풀 (pull)
현재 지정된 로컬 저장소의 브랜치(왼쪽 브랜치 목록에서 굵은 색인 것)에 대해서,
현재 지정된 원격 저장소의 브랜치 정보가 더 최신이라면 그 정보를 가져와서 반영합니다
로컬 브랜치가 바로 영향을 받습니다
변경되는 것은 로컬 저장소입니다
3. 푸시(Push)
현재 지정된 로컬 저장소의 브랜치가
현재 지정된 로컬 저장소의 브랜치의 원격 브랜치 정보보다 최신이라면 그 정보를 업데이트하여 올립니다.
변경되는 것은 원격 저장소입니다
여기서 하려고 하시는 것은 2번의 풀이며, 에러 메시지는 풀 땡기기 전에 작업한 내용을 모두 커밋하라는 내용입니다.
커밋해야할 때 풀 땡기고 머지하고 커밋하는게 아니라
1. 커밋을 한 후에
2. 페치하여 원격 저장소의 변경이 있는지 확인하고
3. 원격 저장소의 변경이 있다면 로컬 브랜치와 원격 브랜치를 머지하고
-> 브랜치명이 branch라면 brach가 로컬, origin/branch가 원격 이므로 이 둘을 머지
다른 사람이 origin/branch를 수정했다면 현재 자신의 branch와 origin/branch가 다른 경로로 나뉘어져 있으므로 이를 합쳐야 함.
4. 커밋 후
5. 푸시하면 됩니다.
위와 같이 한다면, 소스트리의 그래프는 1자로 가다가 양갈래길로 잠깐 나뉘어졌다가 작성자님에 의해 다시 길 하나로 합쳐지는 형태가 됩니다.
참고로 풀이나 페치가 전부 원격으로부터 로컬을 갱신하는 것인데 가장 큰 차이점은
풀을 땡기면 바로 현재 브랜치에 적용이 되는 것이고
페치는 정보만 가져오므로 원격과 로컬 브랜치 상황이 다르다는걸 볼 수 있어, 이 괴리감? 을 해결하기 위해 머지 수행 후 반영할 수 있다는 것입니다
로컬 브랜치와 로컬 브랜치 사이를 이동할 때는 커밋을 하지 않아도 작업 내역을 옮겨 다닐 수 있지만 (커밋 하기 전)
원격 브랜치를 로컬 브랜치로 땡겨올 때는 커밋을 해야합니다
그리고 DPJ님 말씀처럼 커밋 후 풀을 땡기는 경우든
제가 말한 것 처럼 커밋 후 페치하고 머지 후(여기서 컨플릭트) 커밋하고 올리든
같은 파일의 같은부분을 수정했다면 컨플릭트가 나는데, 이거는 머지툴 등을 활용해서 해결 후 커밋하면 됩니다.
출처 : OKKY - 소스트리 사용법을 잘 모르겠습니다. 조언 부탁드립니다.