git과 github로 협업하기

춤추는 병따개·2023년 3월 22일
1
post-thumbnail

브랜치(branch)

git의 브랜치는 커밋 사이를 가볍게 이동할 수 있는 분기와 같은 것이다. 기본적으로 git은 master 브랜치를 만든다. 처음 커밋하면 이 master 브랜치가 생성된 커밋을 가리킨다. 이후 커밋을 계속하면 master 자동적으로 브랜치는 가장 최신 커밋을 가리킨다.

Branch 알아보기
Git 브랜치 - 브랜치란 무엇인가


로컬 저장소 & 원격 저장소

원격 저장소의 사용은 백업협업에 필수이다.

로컬 = 내 컴퓨터
원격 = 가상의 저장소 (인터넷 세상 어딘가에 있는 다른 컴퓨터 속의 저장소
출처

https://github.com/(계정명)
-> 개인 깃허브 주소

https://github.com/(계정명)/momentum(래퍼지토리 명)
-> 개인 깃허브 내 원격 저장소 주소
로컬 -> 원격으로 업로드 하는 방법
... git add .
... git status
... git commit -m 'first commit'
// 커밋은 버전을 생성하는 것
... git log
// 커밋한 브랜치 확인
≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈ 여기까지 로컬 저장소 ≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈
// github에서 새로운 래퍼지토리를 만든다. (원격 저장소 생성)
... git remote add origin (github 원격 저장소 주소)
//remote : 원격 저장소, Origin : 저장소 주소 지칭
//github 원격 저장소 주소를 git에 업로드
... git push origin master
//master : 브랜치
//위 브랜치로 깃허브에 업로드

clone / push (원격 저장소와의 네가지 상호작용)

1️⃣ 클론 clone
원격 저장소를 로컬 환경으로 복제 (다운로드)


ssh 주소를 git에서 붙여넣기 한다.

원하는 폴더의 위치를 정하고 명령어 입력
git clone git@github.com:계정이름/리퍼지토리 이름.git

원격 저장소 브랜치 이름
main 브랜치 == master 브랜치
origin == 원격 저장소에 붙은 별명
origin/HEAD == 원격 저장소 origin의 HEAD
origin/mian == 원격 저장소 origin의 mian

로컬 저장소의 main(master) 브랜치와 HEAD는
원격 저장소의 origin 브랜치와 main 과 다를 수 있다.


2️⃣ 푸시 push
원격 저장소에 로컬 저장소의 커밋을 밀어넣기 (업로드)

git init
//현재 프로젝트에서 변경사항 추적(버전 관리) 시작
git add .
(또는)git add 특정파일
// 변경사항을 추적할 전체 (또는 특정파일) 지정
git commit -m'프로젝트 생성'
// 메세지(-m)와 함께 버전을 생성 

<푸시 진행을 위한 세가지 명령어 🔽>
<깃 허브에 래퍼지토리 생성>
git remote add origin git@github.com:깃헙계정/래퍼지토리 이름.git
// origin이란 별칭으로 원격 저장소 연결 (푸시할 원격 저장소 찾기)

git branch -M main
// 깃허브의 브랜치 이름으로 바꾸는 명령어 (master -> main)

git push -u origin main
(또는) git push origin main  == git push 
// 푸시를 하는 명령어  
// 최초 한 번 입력하고 나면 origin main 생략 가능해 이후부터는 git push 로만 푸시 가능!

Push를 하는 일련의 과정 🔽

(로컬주소) % cd ~
(로컬주소) ~ % cd Desktop
(로컬주소) % mkdir pushtest
(로컬주소) % cd pushtest

(로컬주소 pushtest) % git init
//Initialized empty Git repository in /Users/(계정)/Desktop/pushtest/.git/
(로컬주소 pushtest) % touch a.txt
(로컬주소 pushtest) % vi a.txt
(로컬주소 pushtest) % git add a.txt
(로컬주소 pushtest) % git commit -m "first commit"

//[main (root-commit) 324b70a] first commit
// 1 file changed, 1 insertion(+)
// create mode 100644 a.txt
                             
(로컬주소 pushtest) % git remote add origin git@github.com:(🔐/remot-test).git
(로컬주소 pushtest) % git branch -M main
(로컬주소 pushtest) % git push -u origin main
 
//Enumerating objects: 3, done.
//Counting objects: 100% (3/3), done.
//Writing objects: 100% (3/3), 213 bytes | 213.00 KiB/s, done.
//Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
//To github.com:(🔐/remot-test).git
 * [new branch]      main -> main
branch 'main' set up to track 'origin/main'.
(로컬주소 pushtest) % 

3️⃣ 패치 fetch
원격 저장소의 커밋을 로컬 저장소로 가져만 오기.
클론 이후 원격 저장소에 업데이트 사항이 있을때 다운받아 로컬과 비교하기 위해 사용! 패치는 로컬의 브랜치에까지 영향 없다. (가상의 브랜치인 origin/main으로 fetch 되기 때문)

-> 원격 저장소(github)의 새 커밋을 가져오기 위해선 mrege를 해야함!


4️⃣ 풀 pull
원격 저장소를 로컬 저장소로 가져와서 병합하기
원격 저장소의 새 커밋을 로컬 저장소에 가져와서 병합!
Pull = fetch 패치 + merge 병합

git pull (origin main 생략 가능)


23.3.23 실강

merge

1) fast foward merge (빨리감기 병합)
Main 브랜치 내용이 업데이트 되지 않았을때 사이드 브랜치와 합치는 상황

2) -....? merge (일반 병합)
Main 브랜치의 업데이트 내용와 사이드 브랜치에 업데이트 된 내용이 다를때

주말에 정리
주말에 정리2
주말에 정리3


충돌 conflict

1. 서로 다른 파일을 수정했을 때
2. 서로 같은 파일을 수정했을 때

먼저 1번의 상황은 문제가 없다. (충돌 없음)

A라는 사람이 A.js 파일을 수정했고 B라는 사람이 B.js 파일을 수정했을 때 merge 한다면 git이 자동으로 소스코드를 합쳐줄 것이다.

2-1) 서로 같은 이름의 파일을 수정했지만 수정한 부분이 다를 때
2-2) 서로 같은 이름의 파일을 수정하고 수정한 부분이 겹칠 때

충돌이 발생할 수 있다. 충돌 시 vi 창으로 보여지는 메세지를 택1 하여 해결하는 방법이 있다. (다른 방법도 있었던것 같은데 찾아보고 내용 추가할 예정)

깃의 충돌에 대해 알아보지! 중복되는 부분은 vi창으로 조회가 가능하다.
<<< ~ ===  현재 위치! main branch
=== ~ >>>  사이드 branch
=== 를 기준으로 전자/후자 직접 선택하면 됨!
<<<<<<< HEAD
commit: 인덱스의 상태를 기록하기
=======							
pull: 원격 저장소의 내용을 가져오기
>>>>>>> issue3

rebase

브랜치의 시작점을 바꿀때
git rebase -i ...?


협업하기

풀 리퀘스트 (pull request)
타인이 원격 저장소의 main에 push할 수 있도록 요청하는것!

  1. push하려는 main 저장소를 fork(복사) => '복사된 main저장소'를 사용.
  2. fork한 main저장소를 clone
  3. branch 브랜치이름 생성 후 해당 브랜치에서 작업 (checkout 브랜치이름)
  4. 작업한 브랜치이름 Push
  5. 풀 리퀘스트 요청

profile
FE 개발 공부 중

0개의 댓글