Do it 깃 & 깃허브 입문 이고잉 강사님 특강 3
먼저 깃허브에 가입을 하고 Repository를 만들자

Add .gitignore 하고 template을 지정하면 해당하는 언어의 ignore파일을 자동으로 만들어 주는 기능

Readme는 Github의 홈페이지를 만든다고 생각하면 된다
git remote add origin https://github.com/sjz1/my_git_prac.git
그 다음 push를 하게 되면 다음과 같이 실패하게 된다
git push

나의 로컬 master와 원격 저장소의 어떤 branch를 페어링할지를 모름
(로컬에서는 master인데 원격에서는 main을 하고 싶을 수도 있자나)
그냥 저 중간에 있는 코드 복붙하면 된다
git push --set-upstream origin master
이렇게 하면 local의 master와 remote의 master가 페어링되고 push가 된다
이후엔 그냥 push만 하면 된다
위에가 너무 길면
git push -u origin master
이렇게 축약형으로 쓸 수 있음
의미 : .git 파일을 보면 config 가 있는데

local의 master는 origin에 refs/heads/master 즉 master branch와 연결된다라고 적혀있음
이제부터 git push를 하면 master 에서 작업한 내용이 깃허브에서 master라는 이름으로 올라감

<연결 확인 하는 방법>
git remote -v
git push --all
이거는 checkout 하지 않은 것들도 전부 push 해준다
만약 exp도 원격 저장소로 올리고 싶다면
git checkout exp
git push -u origin exp


다음과 같이
checkout 되어 있지 않은 branch까지 push를 하고 싶으면 아래의 코드를 쓰면 된다
git push --all
<원격 저장소를 로컬 컴퓨터에 복제>
클론 해보기
(GUI 클론 방법은 특강 2를 참조)
File을 눌러 New window를 켜준다
<command line 에서 클론 만들기>
git clone https://github.com/sjz1/my_git_prac.git .
" . "의 의미 현재 디렉토리에 만들어라
(쩜을 안찍으면 my_git_prac이라는 파일이 만들어지고 거기에 복제가 된다 <= 더러워짐)
<서로 다른 로컬저장소에서 서로 다른 파일을 수정>
1. 하나에는 left.txt 하나는 right.txt를 만들기
2. 동기화를 해보자
(R) : git add right.txt
(R) : git commit -m "R1"

(L) : git add left.txt
(L) : git commit -m "L1"
(L) : git push

이상태에서
(R) : git push 를 한다면??? => rejected 난다

원격저장소에 저장된 L1 이 오른쪽에 없는 상태로 어떻게 push를 합니까!!!
(이거 찾아보면 git push --force하면 되는데 절대 하지마)
차근차근 해야지 안된다고 그냥 냅다 git push --force 하면

만약 오른쪽의 head가 exp에 가있고 이 상태에서 push하는 건 아무 상관 없다



<그럼 어떻게 해야하는데!!>
(R) : git pull을 해줘야한다

"같은 이름의 브랜치여도, 깃은 원격 저장소와 지역 저장소를 다른 브랜치로 취급한다."
내 로컬에는 master 가 "R1"에 있는데 orgin/master는 "L1"에 있음!!
=> 아 누군가가 나랑 동시에 작업을 했구나!!
내가 할일 : "R1" + "L1"
즉, 두개의 commit을 합쳐서 하이브리드한 버전을 만들어야 한다
git merge origin/master
master가 origin/master를 merge해야 하니깐

master하고 R1은 내 로컬에만 있다
그래서 오른쪽에서 push를 해준다
git push

이러면 왼쪽 사람이 작업할 때는 git pull
git pull

pull 대신 git fetch + merge origin/master 해도 되지만 귀찮자나
계속해보면 다음과 같은 모양도 나옴

최상단이 지금 병합한 버전
그 버전의 parent는 왼쪽사람이 작업한 L3와 내가 아까 만들었던 merge commit 버전이다
또 그 merge commit 버전은 내가 작업한 R2와 원격저장소에 있던 L2가 parent이다
<요약>
(L) : left.txt 파일 만들기 & 저장
(L) : git add left.txt
(L) : git commit -m "L1"
(L) : git push
(R) : right.txt 파일 만들기 & 저장
(R) : git add right.txt
(R) : git commit -m "R1"
(R) : git push (rejected)
(R) : git pull
(R) : git merge origin/master
(R) : git push
(L) : git pull
(L) : left.txt의 내용을 수정한 다음 저장
(L) : git commit -am "L2"
(L) : git push
(R) : git pull <= 이미 (R)에 left.txt파일이 있으므로 merge할 필요없이 (R)의 left.txt가 update된다
(R) : right.txt의 내용을 수정한 다음 저장
(R) : git commit -am "R2"
(R) : git merge origin/master
(R) : git push
.
.
.
뭐 이런식으로 하다 보면
이렇게도 된다

하... branch가 이렇게 되면 해석이 잘 안됨.....
(이 프로젝트가 어떤 과정을 거쳤는지)
git은 디버깅 때문에 쓰는데 디버깅하기 너무 빡세짐

그래서 rebase라는 것이 등장
'IT Study > Git' 카테고리의 다른 글
| README 뱃지 만들기 (0) | 2023.03.24 |
|---|---|
| [Git] 서버와 싸움한 후기 (0) | 2022.10.29 |
| 2시간은 제발 이해하자 (0) | 2022.10.20 |
| [Git] 이고잉 강사님 특강 (1~2) 복습 & 정리 (0) | 2022.10.20 |
| [Git] Github를 통한 협업 방법 (0) | 2022.10.20 |