git push
push는 로컬에 있는 소스 코드를 리모트로 올리는 액션입니다. push를 하기 위해선 꼭 커밋을 남겨줘야 합니다.
git push
git push origin dev
git push <remote> <branch>
사실 푸쉬는 커밋을 리모트 브랜치에 올리는 액션입니다. 실제 리모트에 반영되는 액션이기 때문에 가장 흔하면서도 매우 조심해야 하는 액션입니다.
git push -f
가끔 push가 안될 때가 있습니다. 이럴 땐 강제로 푸시를 하는 -f 옵션을 사용합니다. 위 옵션은 매우매우 신중하게 사용해야 합니다. -f를 사용하는 경우는 아래와 같습니다.
- reset등의 명령어로 브랜치의 최신 커밋보다 뒤로 간 후 커밋을 지울 때
- merge, rebase 등의 명령어로 merge 커밋이 생겨 충돌이 생겼을 때
대부분 커밋에 변화를 줄 때 사용하게 됩니다.
git push 명령어 모음
git push <remote> --delete <branch> # 리모트 브랜치 삭제
git push --set-upstream <remote> <branch> # 리모트에 없는 로컬 브랜치를 리모트에 올림
git pull
pull은 리모트에 있는 소스 코드를 로컬로 가져오는 액션입니다.
git pull
git pull origin dev
git pull <remote> <branch>
pull을 하면 fetch도 자동으로 됩니다. 하지만 다른 개발자에 의해 예상하지 못한 변경 사항이 생길 수 있으므로 꼭 fetch를 먼저 해주고 pull을 해줘야 합니다.
pull과 merge의 관계
pull은 사실 fetch와 merge를 하는 것과 같습니다.
git fetch
git merge <base branch> <target branch>
merge는 깃에서 제일 말썽을 많이 일으키는 명령어이기 때문에 이해가 여렵다면 당연한 것이니 걱정하지 마세요. 아래에서 실제로 pull을 받기 전 상황을 만들고 fetch와 merge를 이용해 pull을 받아볼게요.
예시 상황은 아래와 같습니다.
아무 브랜치에서 git reset --hard HEAD~3을 입력해주세요(적어도 뒤에 3개 이상의 커밋이 있어야 해요.)
위와 같은 상황이 되었다면 pull을 받기 전 상황이 완성되었습니다! 그렇다면 이제 풀을 받아볼게요.
특정 브랜치의 pull을 받을 땐 아래와 같습니다.
git fetch origin dist-dev-2
git merge dist-dev-2 origin/dist-dev-2
로컬의 dist-dev-2 브랜치가 리모트 브랜치로 움직이는 것을 볼 수 있습니다.
특정 브랜치에 대한pull은 아래 명령어와 같습니다.
git fetch <remote> <branch>
git merge <branch> <remote>/<branch>
pull을 받을 때 merge를 해주는 일이 발생하는 이유도 사실 pull의 명령어 안에서 merge를 실행하기 때문입니다!
pull 명령어들
git pull # 현재 로컬에 있는 브랜치를 모두 풀받음
git pull <remote> <branch> # 로컬 브랜치에 매칭되는 리모트 브랜치를 받아옴
git pull <remote>/<branch> # 리모트 브랜치를 받아옴
git pull -r # merge 대신 rebase를 실행함
강제로 덮어쓰기
깃에서 git pull -f, git pull —force 옵션을 지원하지만 머지 커밋이 있거나 캐시가 꼬인 경우 제대로 동작하지 않습니다. 아래 명령어를 입력해주면 현재 캐시와 변경 사항을 모두 없애고 강제로 원하는 브랜치를 풀 받을 수 있습니다.
cd <git_root_directory> # 레포지토리의 루트로 이동
git fetch <remote> <branch> # 타겟 브랜치 fetch
git rm -rf --cached . # 브랜치 캐시 삭제 (모든 파일이 changes가 됨)
git reset --hard <remote>/<branch> # origin/master 위치로 브랜치를 옮김
git clean -df # changes에서 폴더, 디렉터리 모두 제거
git pull <remote> <branch> # 타겟 브랜치 pull
'GIT > GIT 배워보기' 카테고리의 다른 글
Revert, Cherry pick (0) | 2023.01.28 |
---|---|
Merge, Rebase (0) | 2023.01.28 |
Commit, Log, Status (0) | 2023.01.28 |
Config (0) | 2023.01.28 |
Stash, Clean (0) | 2023.01.28 |