[Git & Git Hub] Git,Git Hub

정진우·2024년 4월 23일
0

Git & Git Hub

목록 보기
1/11
post-thumbnail

Git의 기초

Git은 버전관리시스템으로 알려져 있고, VSC(version control system)로 줄여서 말하기도 합니다.

Git 이름 및 이메일 구성하기

이름 설정

이미 지정되어 있는경우 언제든 변경이 가능합니다.

git config --global user.name "Jung Jinu"

이름을 확인할 경우

git config user.name

이메일 설정

원하면 언제든 변경이 가능합니다.

git config --global user.email jinwoo5092@gmail.com

이메일을 확인할 경우

git config user.email

Git Repository란 무엇인가

버전 관리 시스템(VCS)을 사용하여 소스 코드, 설정 파일, 문서 등을 추적하고 관리하는 공간입니다. 쉽게 말하면, 프로젝트의 모든 변경 사항을 기록하고 이전 버전으로 되돌릴 수 있는 시스템이라고 생각하면 됩니다. https://git-scm.com/docs git에 대해 더 알고싶으면 공식문서를 참조할것.

원격 저장소(Remote Repository)

  • 파일이 원격 저장소 전용 서버에서 일괄로 관리되는 저장소입니다. 원격 저장소를 사용하면 여러 사람이 서버에 있는 하나의 저장소를 공유하여 공동 작업이 가능합니다. git clone 명령을 사용하여 로컬 컴퓨터에 저장소를 복제하면 origin이라는 별명으로 원격 저장소가 설정됩니다.

로컬 저장소(Local Repository)

  • 로컬 저장소는 개인의 컴퓨터에 위치한 저장 공간으로, 여기서 사용자는 자신의 작업을 진행합니다. 이곳에서 코드의 수정, 개발, 업데이트 등 다양한 작업을 수행한 후, 원격 저장소에 변경 사항을 업로드(push)할 수 있습니다. 또한, 원격 저장소에 존재하는 다른 사람의 작업 내용을 다운로드(pull)하여 로컬 저장소에 반영할 수 있습니다. 이렇게 로컬 저장소는 사용자가 코드를 개인적으로 관리하고 작업하는 공간입니다.

인덱스 = Staging Area

  • 커밋을 실행하기 전, 저장소와 작업트리 사이에 존재하는 공간
  • 커밋 작업을 할 때, 작업 트리에 있는 변경 사항을 저장소(Repository)에 바로 기록하지 않습니다. 먼저 Staging Area에 파일 상태를 기록합니다.
  • 변경 사항을 저장소(Repository)에 커밋하려면, 모든 변경 사항들이 Staging Area에 존재해야 합니다.

추적(Stage)

  • 작업 공간에서 변경된 파일을 다음 커밋에 포함되도록 예약하는 것입니다.
  • 파일을 추적하면 그 파일이 스테이징되었다고 말할 수 있습니다. 이것은 인덱스에 등록되었다는 것을 의미합니다.
  • 추적 해제(Unstage): 변경사항을 반영하고 싶지 않은 경우, 추적하던 파일을 스테이지에서 제외합니다.

주요 명령어

git status

git 저장소에서 현재 작업 상태를 확인하는 데 사용하는 명령어입니다.

git status

git init

git init
  • 새로운 git 저장소(repository)를 생성할 때 사용하는 git 명령어입니다.
  • 이 명령어는 프로젝트당 한번만 실행됩니다.
  • 새 Git 저장소를 초기화하기 전에 항상 상태(git status)를 확인하여 실수로 서로 저장소를 중첩하지 않도록 하는 것이 좋습니다.

git add

git add test.txt
  • commit하기 전에 변경 사항을 Staging Area에 추가하는 명령어입니다.
  • git add로 파일들을 그룹화 하여 커밋할 수 있습니다. 예를 들어, "src" 디렉토리에 있는 모든 파일을 한 그룹으로 하고, "docs" 디렉토리에 있는 모든 파일을 다른 그룹으로 하여 커밋할 수 있습니다.
git add src/file1.txt src/file2.txt src/file3.txt # 공백으로 구분합니다.

git add docs/doc1.md docs/doc2.pdf
git add . # 변경된 모든 파일을 한 번에 커밋 준비 상태로 만드는 역할을 합니다.

git commit

git commit -m "파일1.txt 수정 및 파일2.txt 추가"
  • Staging Area에서 변경 사항을 commit합니다. commit을 할 때, 변경 사항과 작업을 요약한 커밋 메시지를 제공해야 합니다.
  • Staging Area 확인 : git commit 명령어를 실행하기 전에 git status 명령어를 사용하여 Staging Area에 있는 파일 목록을 확인합니다.
  • 커밋 메시지 작성 : git commit 명령어와 함께 커밋 메시지를 작성합니다. 커밋 메시지는 변경 사항을 요약하고 의도를 명확하게 전달해야 합니다.
  • 커밋 해시(Commit Hash) : 각 커밋을 구분하는 식별자. 영문/숫자로 이루어진 40자리 고유 이름, 저장소에서는 커밋 해시를 보고 각 커밋을 구분 및 선택함
  • ⭐️ Committing Basics Exercise ⭐️

git commit --amend

git commit --amend # 가장 최근 커밋을 수정하는 기능을 제공
  • 마지막 커밋에 변경사항을 추가하거나 커밋 메시지를 수정하는 역할을 합니다.
  • git commit --amend 명령어를 실행하면 마지막 커밋이 Staging Area에 다시 추가되며, Staging Area에 있는 파일을 수정하거나 추가할 수 있습니다.

예시 - 마지막 커밋에 파일 추가

# 마지막 커밋에 누락된 파일 추가
git add file.txt

# 마지막 커밋 수정
git commit --amend

# 커밋 메시지 입력
# ...

# 마지막 커밋에 파일이 추가된 새로운 커밋 생성
git commit

git log

저장소에 있는 커밋의 시간순 목록을 표시하는 데 사용되는 Git 명령입니다. 커밋 해시, 작성자, 날짜, 커밋 메시지, 변경된 파일 목록 등의 정보를 포함하여 저장소에 대한 커밋의 자세한 기록을 제공합니다.

git log # 최근 커밋 목록

git log -p # 커밋 메시지와 파일 내용

git log -s # 커밋 요약

git log --oneline # - 7자리 커밋 해시, 작성자, 날짜, 커밋 메시지를 한 줄에 포함

git log -gragh # 커밋 그래프

git log --abbrev-commit # 커밋 해시를 7자리로 줄여서 출력 (기본 40자리)

Git hub의 기초

Github는 클라우드에서 Git 저장소를 호스팅하고 다른 사람들과 더 쉽게 협업할 수 있도록 하는 서비스입니다. Github를 사용하려면 계정에 가입해야 합니다. Git을 사용하여 완료된 작업을 공유할 수 있는 온라인 장소입니다.

주요 명령어

git clone

git clone [원격 저장소의 URL 주소] 
# 원격 저장소의 파일을 로컬 작업 디렉토리로 복제합니다.

git push

git push [원격 저장소명]
# 로컬 변경 사항을 원격 저장소로 푸시합니다.
# 원격 저장소의 이름을 지정하지 않는 경우 origin으로 기본 설정 됩니다.

git push [원격 저장소명] [브랜치 이름]
# 로컬에서 특정 브랜치의 변경 사항을 원격 저장소로 푸시합니다.
# ex) git push origin mian

git push -u [원격 저장소명] [브랜치 이름]
# 로컬 브랜치의 변경 사항을 원격 저장소의 특정 브랜치로 푸시하고, 
# 트래킹 브랜치로 설정합니다. 이를 통해 이후에는 git push 명령어만으로 
# 변경 사항을 해당 원격 저장소의 브랜치로 푸시할 수 있습니다.

git push <remote> <local-branch>: <remote-branch>
# 로컬 브랜치의 변경 사항을 원격 저장소의 지정된 브랜치로 푸시합니다.
  • git push를 하기 전에 git pull을 먼저 실행하여 원격 저장소의 최신 변경사항을 로컬에 적용하면, 로컬과 원격 저장소 간의 충돌을 미리 방지할 수 있습니다.

git remote

git remote 
# 현재 저장소에 연결된 원격 저장소의 이름을 출력합니다.

git remote -v
# 이 명령어는 현재 설정된 모든 원격 저장소의 이름, URL, 추적하는 브랜치 정보를 출력합니다.
 
git remote add [원격 저장소명] [원격 저장소 URL]
# 새로운 원격 저장소를 추가합니다. 
# 원격 저장소의 이름을 지정하지 않는 경우 origin으로 기본 설정, 사용자 지정이 가능합니다.

git remote rename [기존 이름] [새로운 이름]
# 원격 저장소의 이름을 변경합니다.

git remote remove [원격 저장소명]
# 원격 저장소를 제거합니다.

git fetch

git fetch [원격 저장소명]
# 원격 저장소에서 최신 변경 사항을 가져옵니다.

git fetch [원격 저장소명] [브랜치 이름]
# 원격 저장소에서 특정 브랜치의 최신 변경 사항을 가져옵니다. 
# ex) git fetch origin mian
  • 원격 저장소에 있는 변경 내역들을 로컬 저장소로 pull 하기 전에 변경된 내역들만 가져와서 확인시켜주는 기능입니다.
  • 원격 저장소에 있는 내용을 pull 하기 전에, 어떠한 변경 내역들이 있는지 변경 내역에 대한 로그를 확인하고 신중히 결정한 후에 pull 할 수 있는 기능입니다.
  • git fetch를 사용하면 원격 저장소의 커밋 히스토리를 로컬의 원격 추적 브랜치로 가져옵니다. 그러나 이는 현재 작업 중인 브랜치에는 반영되지 않습니다. 따라서 git log 명령어를 사용하면 원격 저장소의 최신 커밋 히스토리를 볼 수 없습니다. 원격 저장소의 최신 커밋 히스토리를 확인하려면 git log origin/main과 같은 명령어를 사용해야 합니다.

git pull

git pull [원격 저장소명]
# 지정된 원격 저장소에서 최신 변경 사항을 가져와 현재 작업 디렉토리에 병합합니다.

git pull [원격 저장소명] [브랜치 이름]
# 지정된 원격 브랜치의 최신 변경 사항을 가져와 해당 작업 디렉토리에 병합합니다.
# ex) git pull origin mian
  • git pull을 사용하면 원격 저장소의 변경사항을 바로 로컬 작업 디렉토리에 적용하기 때문에 충돌이 발생할 수 있습니다. 특히, 원격 저장소의 변경사항과 로컬 작업 디렉토리의 변경사항이 충돌하는 경우에 이러한 문제가 발생할 수 있습니다.

git fetch는 원격 저장소의 최신 커밋 히스토리를 로컬로 가져오지만, 로컬 작업 디렉토리의 파일을 실제로 바꾸지는 않습니다. 이로 인해 원격 저장소와 로컬 저장소 사이의 차이점을 확인하고, 필요한 경우 병합 전에 충돌을 방지하거나 수정할 수 있습니다. 반면, git pull은 원격 저장소의 변경 사항을 바로 로컬 작업 디렉토리에 적용하므로, 변경 사항을 검토하는 단계 없이 바로 충돌이 발생할 수 있습니다.

⭐️ Github Basics Exercise ⭐️
⭐️ Oh My Git ⭐️


참고

profile
내가 바뀌지 않으면 아무것도 바뀌지 않는다 🔥🔥🔥

0개의 댓글