1. Git의 주요 기능
버전 관리: Git은 파일이나 디렉토리의 변경 내용을 추적하여 버전을 관리합니다. 이전 버전으로 되돌아갈 수 있고, 변경 사항을 비교하고 병합할 수 있습니다.
분산 관리: Git은 모든 개발자들이 로컬 저장소를 가지고 있기 때문에 중앙 집중식 버전 관리 시스템과 달리 분산 관리가 가능합니다. 이를 통해 개발자들은 인터넷에 연결되지 않은 로컬 환경에서도 작업을 할 수 있습니다.
브랜치 관리: Git은 브랜치를 통해 개발자들이 병렬적으로 작업할 수 있도록 지원합니다. 브랜치를 사용하면 독립적인 작업을 수행하고, 변경 사항을 다른 브랜치와 병합할 수 있습니다.
원격 저장소: Git은 원격 저장소를 통해 여러 개발자들이 공유할 수 있도록 지원합니다. GitHub와 같은 서비스를 사용하면 개발자들이 코드를 공유하고, 코드 리뷰를 수행하고, 문제를 추적할 수 있습니다.
협업: Git은 여러 개발자가 동시에 작업할 수 있는 협업 환경을 제공합니다. Git을 사용하면 다른 개발자의 변경 사항을 확인하고, 충돌을 해결하며, 변경 사항을 공유할 수 있습니다.
2. Git의 주요 명령어
<bash />
git init: 새로운 Git 저장소를 생성합니다.
- 예시: git init
git clone: 원격 저장소의 복사본을 로컬에 다운로드합니다.
- 예시: git clone https://github.com/example/example-repository.git
git add: 변경 사항을 스테이징 영역에 추가합니다.
- 예시: git add file.txt
git commit: 스테이징 영역에 추가된 변경 사항을 로컬 저장소에 반영합니다.
- 예시: git commit -m "added file.txt"
git push: 로컬 저장소의 변경 사항을 원격 저장소로 업로드합니다.
- 예시: git push origin main
git pull: 원격 저장소의 변경 사항을 로컬 저장소로 가져옵니다.
- 예시: git pull origin main
git branch: 새로운 브랜치를 생성하거나, 현재 브랜치를 확인합니다.
- 예시: git branch new-feature
git checkout: 다른 브랜치로 전환하거나, 특정 커밋으로 돌아갑니다.
- 예시: git checkout new-feature or git checkout 456defg
git merge: 다른 브랜치의 변경 사항을 현재 브랜치에 병합합니다.
- 예시: git merge new-feature
git status: 현재 작업 중인 디렉토리의 상태를 확인합니다.
- 예시: git status
3. Git의 Pull Request
1. 원격 저장소를 포크한 후 저장소를 로컬로 클론합니다.
<bash />
git clone https://github.com/example/example-repository.git
2. 로컬에서 새로운 브랜치를 만듭니다.
<bash />git checkout -b my-feature-branch
3. 변경 사항을 커밋하고, 로컬 저장소에 푸시합니다.
<bash />
git add file.txt
git commit -m "added file.txt"
git push origin my-feature-branch
4. GitHub 웹사이트에서 포크한 저장소로 이동하고, "New pull request" 버튼을 클릭합니다.
베이스(base) 브랜치와 비교할 브랜치를 선택합니다.
변경 사항을 검토하고, 제목과 설명을 작성한 후 pull request를 생성합니다.
4. Git History 변경
- 먼저 리포지토리를 로컬 컴퓨터에 복제하고, 숨기려는 히스토리가 있는 브랜치로 전환합니다.
- git rebase -i --root 명령을 사용하여 대화형 리베이스 창을 엽니다. 이 명령을 실행하면 커밋 목록이 있는 텍스트 편집기가 열립니다.
- 숨기려는 커밋을 찾아 해당 커밋 앞에 있는 "pick"이라는 단어를 "squash"로 바꿉니다. 이렇게 하면 해당 커밋의 변경 사항이 이전 커밋의 변경 사항과 합쳐집니다.
- 변경 사항을 저장하고 텍스트 편집기를 닫습니다. Git은 이제 리베이스 프로세스를 시작하고, 결합된 커밋의 커밋 메시지를 수정하도록 요구합니다.
- 필요한 대로 커밋 메시지를 편집하고 변경 사항을 저장합니다.
- git push --force 명령을 사용하여 변경 사항을 원격 리포지토리에 강제로 푸시합니다. 이렇게 하면 새로운, 수정된 히스토리로 기존의 히스토리가 덮어쓰여집니다.
5. Fork 한 repository 최신으로 동기화
1. 먼저 로컬 컴퓨터에서 원격 저장소의 복제본을 만듭니다.
<bash />
git clone https://github.com/your-username/repo-name.git
2. 복제된 로컬 저장소에서 원격 저장소를 upstream으로 추가합니다.
<bash />git remote add upstream https://github.com/original-owner/repo-name.git
3. 최신 업데이트를 가져오기 위해 upstream 저장소에서 변경 사항을 가져옵니다.
<bash />git fetch upstream
4. 가져온 변경 사항을 로컬 저장소의 브랜치에 병합합니다.
<bash />git merge upstream/main
5. 변경 사항을 Fork한 원격 저장소에 Push하여 동기화합니다
<bash />git push origin main
6. GitHub SSH 등록
1. 로컬 컴퓨터에서 ssh-keygen 명령어를 사용하여 SSH 키를 생성합니다.
(base) jeong ~ % ssh-keygen -t rsa -C "your_id@your_email_host.com"
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): ******* (your_password_here)
Enter same passphrase again: ******* (your_password_here)
Your identification has been saved in /Users/wjdgns/.ssh/id_rsa.
Your public key has been saved in /Users/wjdgns/.ssh/id_rsa.pub.
2. 생성된 SSH 키를 확인합니다.
<bash />cat ~/.ssh/id_ed25519.pub
3. GitHub 웹사이트에서 Settings > SSH and GPG keys 메뉴로 이동합니다.
"New SSH key" 버튼을 클릭합니다.
"Title"에는 SSH 키의 이름을 입력하고, "Key"에는 로컬 컴퓨터에서 생성한 공개 키를 복사하여 붙여넣습니다.
"Add SSH key" 버튼을 클릭하여 등록을 완료합니다.
