본문 바로가기
IT Study/Git

[Git] 서로 다른 로컬저장소에서 서로 다른 파일을 수정

by 하람 Haram 2022. 10. 24.
728x90

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

다음과 같이 branch가 생긴 것을 볼 수 있다

 

다음과 같이 

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하는 건 아무 상관 없다

exp branch에서는 left.txt가 있을 필요가 없으므로

 

<그럼 어떻게 해야하는데!!>

(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

.

.

.

 

 

 

뭐 이런식으로 하다 보면

이렇게도 된다

git branch hell

 

하... branch가 이렇게 되면 해석이 잘 안됨.....

(이 프로젝트가 어떤 과정을 거쳤는지)

git은 디버깅 때문에 쓰는데 디버깅하기 너무 빡세짐

 

 

 

그래서 rebase라는 것이 등장

 

728x90

'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