본문 바로가기
Git Study

깃헙시험준비

by xogns93 2024. 7. 28.

1. remote empty repo 생성 

깃헙가서 + 누르고 새로운 레파지토리 생성

 

 

2. git init & git push

폴더만들 주소로 간뒤 mkdir 폴더이름 으로 폴더만들고 cd ./폴더이름 으로 위치바꿔주고

git init 으로 로컬저장소로 초기화해주고

git remote add origin 깃헙주소 로 원격저장소 설정

암거나 만들고 git push -u origin main (처음 푸쉬할때 -u 로 설정해주고 담부턴 그냥 git push만 해도 됨, 여기서 origin은 원격 저장소의 이름이고, main는 브랜치 이름) 뭔 에러 뜨면 원격 저장소가 로컬 저장소에 없는 변경 사항을 포함하고 있기 때문에 발생한거라 git pull 하자

 

3. git local branch 생성 -> remote repo 생성

git checkout -b 만들브랜치이름

자동으로 브랜치 만들고 이동됐으니 여기서 파일을 생성하고 git add . 랑 git commit -m 다한뒤

git push origin 현재브랜치이름

 

4. fast forward merge

다른 A라는 브랜치에서 작업수행하고 스테이징 및 커밋한 뒤, 

main 브랜치로 돌아와서 git merge A 하면 main에 A가 머지된다. 

 

5. 3 way merge - conflict merge

다른 A라는 브랜치에서 작업수행하고 스테이징 및 커밋한 뒤,

main 브랜치로 돌아와서 같은 작업(예를 들면 둘다 같은 줄에 뭔갈 적어서 추가한다던지)수행하고 git merge A 하면

같은작업을해서 너 뭘로 바꾸겠단거야! 라고 충돌발생하기때문에 vi 파일이름 으로 가서 뭘로 바꿀지 정해주고

git add . 랑 git commit -m 해주면 충돌해결하고 머지완료

 

6. rebase - conflict merge

위에서 했던 작업과 동일하게 하고

git checkout A 로 A브랜치로 이동한 뒤에,
git rebase main A브랜치를 main브랜치 위로 리베이스 ! 

하면 충돌 발생하면 수정해주고 git add . 해준 뒤에 git rebase --continue 로 리베이스 다시 해주면 된다.

 

충돌해결하고 git add . 까진 같지만 머지는 커밋, 리베이스는 컨티뉴 해주는게 다름 !!!!

 

번외 . 리베이스 한다음 reset으로 돌리고 머지 하는 방법

1번방법

# 리베이스 전 상태로 되돌리기
git reset --hard ORIG_HEAD

git checkout main 으로 main 간다음 머지하면됨

 

2번방법

# 리베이스 전 커밋 해시를 확인하기 위한 로그 보기
git reflog

reflog 명령어를 사용하여 이전 커밋 해시를 확인한 후, 해당 커밋 해시로 되돌릴 수 있습니다. 예를 들어, 리베이스 전 커밋 해시가 abc1234라면:

git reset --hard abc1234

이 방법은 ORIG_HEAD를 사용하는 것보다 명확하고 직관적입니다.

 

7. remote branch와 local branch 충돌 해결

예를들어 깃헙가서 같은파일 3번째줄 수정 한다음, 로컬저장소에서 같은파일 3번째줄수정하고 add하고 commit 하고

로컬저장소에서 push하려고 하면 안되기 때문에 git pull 하라고 하는데 그것도 안됨 왜냐하면 로컬 브랜치와 원격 브랜치가 분기되어 있어, Git이 이를 어떻게 통합할지 지시해 달라는 요청을 하기 때문에 이를 해결하기 위해 git pull 명령어에 옵션을 추가하여 병합 방식을 지정해야한다.

다음 세 가지 옵션 중 하나를 사용할 수 있음

  1. git pull --rebase: 리베이스를 사용하여 병합합니다.
  2. git pull --no-rebase: 병합 커밋을 생성하여 병합합니다.
  3. git pull --ff-only: Fast-forward 병합만 허용합니다.

그렇기 때문에 git pull --rebase origin main 해주면 충돌했다고 나오고 git status 로 충돌파일 확인후

수정해주고 git add . 한뒤에 git rebase --continue 해주면 충돌해결 !

 

다른방법 지피티검색 이렇게

remote branch와 local branch 충돌 해결 예시 만들려고하는데 밑에처럼 설명하는데 무슨소리야

동일한파일 로컬은 쭉쓰고 리모트도 쭉쓰고 로컬에서 폴더만들고한다음 리모트에서 push해봐

 

예제 시나리오

  1. master 브랜치에서 파일을 수정하고 커밋합니다. 
  2. 로컬에서 새로운 브랜치를 생성하여 같은 파일을 수정하고, 새로운 폴더와 파일을 생성한 후 커밋합니다.
  3. 원격 저장소에 변경 사항을 푸시합니다. 
  4. master 브랜치에서 원격 저장소의 변경 사항을 가져와 충돌을 해결합니다.

단계별 예제

1. 저장소 초기화 및 초기 커밋

먼저, 새로운 Git 저장소를 초기화하고 초기 커밋을 만듭니다.  

mkdir conflict-example
cd conflict-example
git init
echo "Initial content" > example.txt
git add example.txt
git commit -m "Initial commit"

2. 로컬 브랜치 생성 및 수정

로컬 브랜치를 생성하고 파일을 수정한 후, 새로운 폴더와 파일을 생성하여 커밋합니다.

git checkout -b feature-branch
echo "Local changes in feature branch" >> example.txt
mkdir new-folder
echo "New file in new folder" > new-folder/new-file.txt
git add example.txt new-folder/new-file.txt
git commit -m "Update example.txt and add new-folder with new-file.txt"

3. 원격 저장소에서 파일 수정 및 푸시

원격 저장소에서 동일한 파일을 수정하고 커밋한 후, 변경 사항을 푸시합니다. 이는 원격 저장소에서 수행되었다고 가정합니다.

# master 브랜치로 돌아가기
git checkout master

# 파일 수정
echo "Remote changes in master branch" >> example.txt

# 변경 사항 커밋
git add example.txt
git commit -m "Update example.txt in master branch"

# 원격 저장소에 푸시 (원격 저장소가 설정되어 있다고 가정합니다)
git remote add origin https://github.com/your-username/conflict-example.git
git push -u origin master

4. 로컬 브랜치의 변경 사항 푸시

로컬 브랜치에서 원격 저장소에 변경 사항을 푸시합니다. 이 때 충돌이 발생합니다.

git checkout feature-branch
git push origin feature-branch

5. 원격 저장소의 변경 사항 가져오기 및 충돌 해결

master 브랜치에서 원격 저장소의 변경 사항을 가져와 충돌을 해결합니다.

# master 브랜치로 돌아가기
git checkout master

# 원격 저장소의 변경 사항 가져오기
git pull origin master

# 충돌 해결
# example.txt 파일을 열어 충돌을 해결합니다.
# 충돌 내용 예시:
# <<<<<<< HEAD
# Remote changes in master branch
# =======
# Local changes in feature branch
# >>>>>>> feature-branch

# 충돌을 해결한 후
echo "Remote changes in master branch" > example.txt
echo "Local changes in feature branch" >> example.txt

# 충돌 해결 후 변경 사항 스테이징 및 커밋
git add example.txt
git commit -m "Resolve conflict between master and feature-branch"

# 병합된 변경 사항 푸시
git push origin master

 

8. local branch 및 remote branch 삭제

 

로컬브랜치삭제는 main으로 이동한다음 

 

  • git branch -d 브랜치이름 : 삭제할 브랜치가 병합된 상태여야 합니다.
  • git branch -D 브랜치이름 : 병합 여부에 상관없이 강제로 브랜치를 삭제합니다.

원격브랜치삭제는 main으로 이동한다음

  • git push origin --delete 브랜치이름 

 

원격 저장소에서 새로 만든 브랜치는 자동으로 로컬 저장소에 가져와지지 않습니다. 로컬 저장소에서 git pull을 수행하면 현재 체크아웃된 브랜치의 최신 변경 사항만 가져옵니다. 새로 생성된 원격 브랜치를 로컬로 가져오려면 몇 가지 추가 단계를 수행해야 합니다.

 

1. 원격 브랜치 목록 갱신

      git fetch

2. 새로 생성된 브랜치 확인

      git branch -r

3. 새 브랜치를 로컬 브랜치로 체크아웃

      git checkout -b 새로생긴브랜치이름 origin/새로생긴브랜치이름

 

9.  git undo (git commit –amend)

한번 아무거나 커밋까지 한다음

파일 수정하고 git add . 한다음

git commit --amend 해주면 커밋메시지 바꿀거냐고 물어보는데 :q 하고 나오면 됨

 

만약 오류발생하면 git pull origin main --no-rebase 하고 git status 로 충돌파일 확인하고 수정한다음

git add . 이랑 git commit 해주면 된다. git push origin main 해서 원격리모트도 업뎃시켜주자

 

10.  team - collaborate : 팀원마다 브랜치가 할당. 이후 main 브랜치로 머지

 

 

 

 

 

 

 

 

 

 

 

 

'Git Study' 카테고리의 다른 글

머지(merge)와 리베이스(rebase)  (1) 2024.07.28