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 : 브랜치
//위 브랜치로 깃허브에 업로드
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 실강
1) fast foward merge (빨리감기 병합)
Main 브랜치 내용이 업데이트 되지 않았을때 사이드 브랜치와 합치는 상황
2) -....? merge (일반 병합)
Main 브랜치의 업데이트 내용와 사이드 브랜치에 업데이트 된 내용이 다를때
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
브랜치의 시작점을 바꿀때
git rebase -i ...?
풀 리퀘스트 (pull request)
타인이 원격 저장소의 main에 push할 수 있도록 요청하는것!
fork(복사)
=> '복사된 main저장소'를 사용.clone
branch 브랜치이름
생성 후 해당 브랜치에서 작업 (checkout 브랜치이름
)브랜치이름 Push