기타/Git

[Git] 원격 저장소 및 고급 Git 활용법

glorypang 2025. 3. 18. 00:32
728x90
반응형
SMALL

1. 원격 저장소 (Remote Repository)

1.1 원격 저장소 생성

 로컬 저장소 생성 및 초기화

 
$ git init local  # "local"이라는 Git 저장소 생성

 원격 저장소 전용 저장소 생성(Bare Repository)

$ git init --bare
  • Bare Repository: 소스 코드 작업 없이 Git 서버로만 사용되는 저장소
  • 협업 환경에서 중앙 원격 저장소 역할을 함

1.2 원격 저장소 연결 및 설정

 기존 로컬 저장소에 원격 저장소 추가

$ git remote add origin /c/Users/dys11/Desktop/Git_practice/remote
  • origin은 별명(alias)이며, 원격 저장소 주소를 쉽게 관리하기 위한 것

 원격 저장소 삭제

$ git remote remove origin

 

 원격 저장소 연결 확인

$ git remote -v

1.3 원격 저장소로 Push (업로드)

 로컬 브랜치를 원격 저장소로 Push

$ git push origin master
  • `master` 브랜치를 원격 저장소(origin)의 같은 브랜치로 push
  • 로컬 저장소를 기준으로 원격 저장소로 나의 작업을 보낼 때 사용( = push)

✅ 자동 푸시 설정

$ git config --global push.default simple
  • Git의 기본 push 설정을 simple 방식으로 변경

✅ 첫 푸시 시 브랜치 연결(-u 옵션)

$ git push --set-upstream origin master

 

  • 현재 로컬 브랜치를 원격 저장소의 master 브랜치와 연결
  • 이후부터는 git push만 사용해도 자동으로 푸시

1.4 GitHub와 원격 저장소 연결

Github 저장소 복제(Clone)

$ git clone https://github.com/git/git.git gitsrc
 
  • gitsrc라는 폴더에 해당 Git 저장소를 복사

 

✅ 로컬 저장소를 원격 저장소에 연결

$ git remote add origin https://github.com/사용자명/저장소명.git

 

✅ 원격 저장소를 로컬로 복사(Clone)

$ git clone https://github.com/glorypang/Git_practice.git .
  • 현재 디렉토리에 저장소 다운로드

 

 

1. Github에서 New 버튼으로 새로운 레포지를 생성

 

2. Clone의 두가지 방법

위의 방법: 원격 저장소를 만들고,  로컬 저장소를 만들고 원격 저장소에 옮기기

밑의 방법 로컬 저장소에서 작업하던 것을 원격 저장소로 옮기기

 

  • 원격 저장소에 로컬 저장소를 add + 주소에 origin이라는 별명 부여
git remote add origin https://github.com/glorypang/Git_practice.git

 

 

✅ 현재 디렉토리에 clone

$ git clone https://github.com/glorypang/Git_practice.git .

 


2. 브랜치 충돌 해결 (Merge Conflict)

2.1 브랜치 충돌 원인

  • 두 개의 브랜치에서 같은 파일의 같은 위치를 수정하면 충돌 발생
  • git merge 실행 시 자동 병합이 불가능할 경우 충돌 메시지 출력
$ git merge exp
# 충돌 발생 (CONFLICT)

 

충돌 발생 시 메시지 예시

CONFLICT (content): Merge conflict in example.txt
Automatic merge failed; fix conflicts and then commit the result.
 

both modified: 양 쪽이 다 수정됐다

2.2 충돌 해결 방법

충돌 파일 열어보기

$ vim example.txt​

 

 충돌 파일 내부 예시

<<<<<<< HEAD # 현재 checkout한 브랜치의 수정사항
현재 브랜치의 코드 (master)
=======  # 구분자
병합하려는 브랜치의 코드 (exp)
>>>>>>> exp # exp브랜치의 내용
 

수정 전
수정 후

수정 후 충돌 해결 커밋

$ git add example.txt
$ git commit -m "Merge conflict resolved"​

$git commit시, conflict 해결 문구 나옴


3. Reset vs Checkout (이전 커밋으로 되돌리기)

3.1 Reset 종류 (--soft, --mixed, --hard)

  • `$git commit`하면 repository상태
  • `$git add` 하면 index상태 (staging area)
  • 파일 작성만 했다면 working copy 상태
옵션 설명
`--soft` 커밋만 취소, 작업 내용 유지
`--mixed` 커밋 & 스테이징 취소, 파일은 유지
`--hard` 모든 변경사항 삭제 (복구 불가)

예제

$ git reset --soft HEAD~1  # 최근 커밋만 취소
$ git reset --mixed HEAD~1  # 커밋 + 스테이징 취소
$ git reset --hard HEAD~1  # 모든 변경 사항 삭제
Working directory
Working tree
Working copy
index
Staging are
Cache
repository
history
tree
    git reset --sotf
  git reset --mixed
git reset --hard

 

특정 커밋으로 되돌리기

  • 특정 커밋 ID로 이동 (변경 사항 완전 삭제)
$ git reset --hard c79dc014a6

 

과거 커밋 로그 확인

  • 모든 커밋 히스토리 확인 가능
  • reset 후에도 커밋 ID를 찾아 다시 되돌릴 수 있음
$ git reflog​

 

 

4. Rebase vs Merge

4.1 Merge (병합)

  • 두 개의 브랜치를 합치는 방식
  • 새로운 병합(commit)이 생성됨

Merge 예제

$ git checkout master
$ git merge feature-branch
 

Merge 후 로그

*  (master) Merge branch 'feature-branch'
*  (feature-branch) 새로운 기능 추가
*  (master) 기존 코드
 

📌 특징

  • 새로운 커밋이 추가되면서 히스토리가 남음
  • 협업 환경에서 많이 사용됨 (기록을 남기기 때문)

4.2 Rebase (기반 변경)

  • 브랜치 기반을 변경하여 히스토리를 정리하는 방식
  • Merge와 달리 새로운 커밋을 생성하지 않고 기존 커밋을 재배치

Rebase 예제

$ git checkout feature-branch
$ git rebase master
 

📌 특징

  • 브랜치 커밋을 마치 하나의 연속된 커밋처럼 정리
  • 병합 커밋이 생성되지 않아 히스토리가 깔끔
  • 개인 작업에는 유용하지만, 협업 중 rebase 사용은 신중해야 함

Rebase 후 로그

* (master) 새로운 기능 추가
* 기존 코드
  • 기존 브랜치 히스토리가 정리됨

충돌 발생 시 해결

$ git rebase --continue

 

728x90
반응형
LIST