Remote 저장소에 '로컬 수정사항/로컬 브랜치' 올리기
: $ git push <RemoteName> <LocalBranchName>
: 로컬의 브랜치(LocalBranchName)를 Remote 서버로 전송
- 로컬의 브랜치를 서버로 전송하려면 쓰기 권한이 있는 리모트 저장소에 Push 해야 한다.
- $ git commit 과 $git push 비교
: Git은 local repository가 있기 때문에, Git 에서의 commit은 local repository에 저장되는것을 의미하고,
이 커밋사항을 Git remote repository에 저장하려면 push를 해주어야 한다.
1. 로컬 브랜치의 이름과 리모트 서버의 브랜치 이름이 다를 때
: $ git push origin <LocalBranchName>:<AddingRemoteBranchName>
- 리모트 저장소에 로컬의 브랜치(LocalBranchName) 이름 대신 다른 이름(AddingRemoteBranchName)으로 원격에서 브랜치 사용
2. 로컬 브랜치를 리모트 서버에도 브랜치 추가
: $ git push origin <LocalBranchName>
- "로컬 브랜치는 자동으로 리모트 저장소로 전송되지 않는다. 명시적으로 브랜치를 Push 해야 정보가 전송된다. "
- 리모트 저장소에 전송하지 않고 로컬 브랜치에만 두는 '비공개 브랜치'를 만들 수 있다.
- 다른 사람과 협업하기 위해 '토픽 브랜치'만 전송할 수도 있다.
- ex) serverfix 라는 브랜치를 다른 사람과 공유할 때도 브랜치를 처음 Push 하는 것과 같은 방법으로 Push 한다.
$ git push origin serverfix
Counting objects: 24, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (24/24), 1.91 KiB | 0 bytes/s, done.
Total 24 (delta 2), reused 0 (delta 0)
To https://github.com/schacon/simplegit
* [new branch] serverfix -> serverfix
ㄴ> Git은 serverfix라는 브랜치 이름을 refs/heads/serverfix:refs/heads/serverfix 로 확장한다.
이것은 serverfix 라는 로컬 브랜치를 서버로 Push 하는데 리모트의 serverfix 브랜치로 업데이트한다는 것을 의미한다.
ㄴ> $ git push origin serverfix:serverfix 라고 Push 하는 것도 같은데
이것은 '로컬의 serverfix 브랜치를 리모트 저장소의 serverfix 브랜치로 Push 하라' 라는 뜻이다.
Remote 저장소에서 데이터 가져오기
: #1) $ git fetch
: 서버에는 존재하지만, 로컬에는 아직 없는 데이터를 받아와서 저장한다.
- 워킹 디렉토리의 파일 내용은 변경되지 않는다.
- 서버로부터 데이터를 가져와서 저장해두고 Merge하지는 않는다.
- ※주의★★)
$git fetch 명령으로 "리모트 트래킹 브랜치를 내려받는다고 해서 로컬 저장소에 수정할 수 있는 브랜치가 새로 생기는 것이 아니다. "
ㄴ> ex)
$ git fetch origin
remote: Counting objects: 7, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0)
Unpacking objects: 100% (3/3), done.
From https://github.com/schacon/simplegit
* [new branch] serverfix -> origin/serverfix
ㄴ> serverfix 라는 브랜치가 생기는 것이 아니라 "그저 수정 못 하는 origin/serverfix 브랜치 포인터가 생기는 것"이다.
새로 받은 브랜치의 내용을 Merge 하려면 $ git merge origin/serverfix 명령을 사용한다.
: #2) $ git pull
: 서버에는 존재하지만, 로컬에는 아직 없는 데이터를 받아와서 저장 및 Merge한다.
- 서버로부터 데이터를 가져와서 저장해두고 Merge한다.
- [동작과정]
clone 이나 checkout 명령을 실행하여 '트래킹(Tracking) 브랜치'가 설정되었고,
$ git pull 명령을 실행하면 서버로부터 데이터를 가져와서
'현재 로컬 브랜치'와 '서버의 트래킹(Tracking) 브랜치'를 Merge 한다.
- $ git fetch 명령을 실행하고 나서 자동으로 $ git merge 명령을 수행하는 것뿐이다.
($ git fetch + $ git merge) 명령 = $ git pull 명령
Remote 저장소 브랜치 삭제
: $ git push <RemoteName> --delete <RemoteBranchName>
- $ git push --delete 옵션 사용
- ex) serverfix 라는 리모트 브랜치를 삭제하려면 아래와 같이 실행한다.
$ git push origin --delete serverfix
To https://github.com/schacon/simplegit
- [deleted] serverfix
- 명령어 실행 시 서버에서 브랜치(즉 커밋을 가리키는 포인터) 하나가 사라진다.
서버에서 가비지 컬렉터가 동작하지 않는 한 데이터는 사라지지 않기 때문에 종종 의도치 않게 삭제한 경우에도 커밋한 데이터를 살릴 수 있다.
END!
스터디 도움 참조 블로그 (References)
- Refs http://ghcksdk.com/git-master%EC%97%90%EC%84%9C-branch%EB%A1%9C-pull-%ED%95%98%EA%B8%B0-git-refs/ - git ls-remote https://runebook.dev/ko/docs/git/git-ls-remote https://nochoco-lee.tistory.com/30 - git Remote 저장소 관련 https://thisblogbusy.tistory.com/entry/Git-Basics-Working-with-Remotes - 3.5 Git 브랜치 https://git-scm.com/book/ko/v2/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EB%A6%AC%EB%AA%A8%ED%8A%B8-%EB%B8%8C%EB%9E%9C%EC%B9%98 - What is a tracking branch? https://stackoverflow.com/questions/4693588/what-is-a-tracking-branch https://stackoverflow.com/a/4693780 - tracking branch https://jw910911.tistory.com/16 - What is a tracking branch? https://stackoverflow.com/a/4693780 - Git Remote Tracking Branch and Upstream Branch are different ? https://stackoverflow.com/questions/62137200/git-remote-tracking-branch-and-upstream-branch-are-different - [Git] branch 관련 명령어 모음(생성, 관리, 삭제) https://developerntraveler.tistory.com/62 - git--distributed-even-if-your-workflow-isnt (Pro Git Book) https://git-scm.com/book/en/v2 |