GitHub(≒ GitLab, Bitbucket)
repository가 잘 생성되었다면 다음 화면이 나타날 것이다.
ⅰ. 'Quick setup - ...'에서 'HTTPS' 선택
ⅱ. 두 가지 옵션 '...or create a new repository ...', '...or push an existing repository ...' 중에서 후자 선택
(로컬에 git으로 관리되고 있는 프로젝트가 이미 존재하는 상태이므로)
ⅲ. vscode에 붙여넣기
24 commits를 통해, 프로젝트에 대한 커밋 히스토리를 볼 수 있다.
소스트리를 살펴보자. main, origin/main 브랜치가 존재함을 볼 수 있다.
내가 방금 vscode에 붙여넣은 명령어들을 살펴보자.
git remote add origin (원격 저장소 주소): 원격 저장소로의 연결 추가
remote add: 원격 저장소(로의 연결)를 추가하겠다.
origin: 원격 저장소의 이름. 임의로 변경 가능하지만, 기본 branch명이 main인 것처럼, 기본 원격 저장소 이름은 origin이다.
소스트리를 보면, 위와 같이 '원격' > 'origin'을 볼 수 있음
git branch -M main: 기본 브랜치명을 main으로 바꿔준다.
git config --global init.defaultBranch main
위 명령어를 입력하기 전, 기본 브랜치명은 master
나는 이전에 위 명령어를 통해 기본 브랜치명을 main으로 변경하였다.
따라서 이 명령어는 의미가 없다(이미 기본 브랜치명이 main이니까).
<내 생각에는, git branch -M main 명령어는 원격의 기본 브랜치명을 main으로 바꿔주는 것, git config ~ 명령어는 로컬, 원격의 기본 브랜치명을 모두 main으로 바꿔주는 것>
git remote
현재 프로젝트와 연결된 원격 저장소의 목록을 볼 수 있다.
git remote -v
위 명령어를 통해 좀 더 자세히 볼 수 있다.
참고) 원격 저장소와의 연결 끊기
git remote remove (origin 등 원격 이름)
GitHub repository가 삭제되는 것이 아니라, 로컬과 원격의 연결을 끊는 것이다.
프로젝트를 다운받을 폴더를 만들고, 해당 폴더에서 우클릭 통해 git bash를 연다. 그리고 다음 명령어를 입력한다.
git clone (원격 저장소 주소)
Cloning이란, 원격 저장소에 있는 모든 것(*.git 포함)을 내 로컬 PC로 복사한다는 뜻이다.
참고) 'Code' > 'Download ZIP'으로 프로젝트 다운로드 받기
해당 프로젝트에는 *.git 폴더가 없다. 즉, 협업할 때 사용 x
지금까지 한 것: 로컬, 원격 연결하기
지금할 것
로컬에서 커밋 하나를 생성했다.
leopards.yaml의 members에 'Evie'를 추가하였다.
이 커밋을 원격 저장소에 push한다.
git push
참고) 이전에 'git push -u origin main' 명령어를 통해, origin 원격 저장소의 main 브랜치로 push하겠다는 기본 설정을 했었다.
임시로 원격 저장소에 커밋 하나를 생성해보자.
(실제로는 내 동료가 생성한 커밋이 될 것)
leopards.yaml의 members에 'Dongho'를 추가한느 커밋을 생성하였다.
원격에 있는 커밋을 로컬로 pull한다.
git pull
명령어 실행 결과, leopards.yaml의 members에 'Dongho'가 추가된 것을 볼 수 있다.
상황: 나, A가 협업하고 있다. A가 로컬에서 커밋한 후 원격에 push하였다. 이때, A가 커밋한 내용은 leopards.yaml의 manager를 'Dooli'로 변경한 것! 나도 원격에 push하려고 한다. 내가 로컬에서 커밋한 내용은 leopards.yaml의 coach를 'Lupi'로 변경한 것! 정리하자면, A가 원격에 push한 이후, 내가 원격에 push하려고 한다.
원격에 새로운 커밋이 있기 때문에 push할 수 없다.
git push
push하기 전에 먼저 pull부터 해야 하는데, 이때, 2가지 옵션이 있다.
git pull --no-rebase
git push
git pull --rebase
git push
상황: 나, A가 협업하고 있다. A가 로컬에서 커밋한 후 먼저 원격에 push하였다. 이때, A가 커밋한 내용은 panthers.yaml의 members에 'Arachi'를 추가한 것! 나도 원격에 push하려고 한다. 내가 로컬에서 커밋한 내용은 panthers.yaml의 members에 'Maruchi'를 추가한 것!
push하기 전에 먼저 pull부터 해야한다.
옵션1. --no-rebase
git pull --no-rebase
원격에서 로컬로 pull하려고 하는데, conflict 발생 -> conflict 해결 후, 'git add .', 'git commit'
옵션2. --rebase
git pull --rebase
pull할 때의 rebase는 협업할 때도 사용해도 괜찮다. 이미 공유된 커밋에 대해 rebase하지 말라는 뜻이다.
pull한 후에 push한다.
git push
원격에 새로운 커밋이 존재하는 경우, 로컬에서는 push를 할 수 없다. 그런데, 원격에 새로 올라간 커밋의 내용이 잘못되어, 로컷의 커밋으로 강제로 맞춰줘야 하는 경우가 존재한다. 로컬대로 원격의 커밋이 맞춰진다.
git push --force
나 혼자 프로젝트를 진행할 때, 또는 협업 중 강제 push하기로 서로 협의가 된 경우에만 사용해야 한다. 안 그러면, 협업 중 다른 사람이 작성한 코드가 날라가버린다.
로컬에서 from-local에 브랜치에 위치한 후, 'git push' 수행했더니,
push할 대상을 명시하라는 뜻. from-local 브랜치에 있는 커밋을 어디에 push해야 할지 모르겠다는 것이다.
git push --set-upstream origin from-local
또는
(--set-upstream는 -u로 축약 가능하므로)
git push -u origin from-local
로컬의 from-local 브랜치가 origin의 from-local 브랜치에 대응되고, push까지 완료된다.
위와 같이 원격에 from-local가 생성된 것을 볼 수 있다.
git branch --all 또는 git branch -a
git switch -t origin/from-remote
-t origin/from-remote: 로컬에 같은 이름의 브랜치가 생성되고, 복사되고(origin의 from-remote 브랜치 내용이), 로컬에서는 해당 브랜치로 switch된다. 그리고 이후로도 로컬의 from-remote가 origin의 from-remote와 연결된다.
현재 브랜치는 main, origin/main, from-local, origin/from-local, from-remote, origin/from-remote가 존재한다. main, origin/main을 제외하고 모든 브랜치를 삭제하자.
git switch main
git branch -d from-local
git branch -d from-remote
git push origin --delete from-local
git push origin --delete from-remote
원격의 branch 삭제하기
git push (원격의 이름) --delete (원격의 브랜치명)
참고) 원격 저장소
상단 '저장소' > '원격 저장소 추가...' > '추가' > '원격 이름', 'URL / 경로' 필드 입력
'URL / 경로' 필드에는 아래와 같이, GitHub에 repository를 만든 후에 'Quick setup ...'에 있는 URL을 붙여넣는다.