하늘바람a 2024. 4. 1. 23:56

Git 

Git은 분산형 버전 관리 시스템으로, 프로젝트의 소스 코드를 효율적으로 관리하고 협업하는 데 사용되는 도구이다.

버전 관리, 브랜치 관리, 충돌 해결 등의 기능을 제공하여 개발자들이 프로젝트를 효율적으로 관리할 수 있도록 한다.

 

Git 저장소를 생성하는 곳

  1. 명령 프롬프트 또는 터미널: 명령줄 인터페이스(Command Line Interface, CLI)를 사용하는 명령 프롬프트나 터미널 에서 Git 저장소를 생성할 수 있다.
  2. 그래픽 사용자 인터페이스(GUI): 소스트리(Sourcetree), GitHub Desktop 등과 같은 GUI 도구를 사용하여 시각적으로 Git 저장소를 생성하고 관리할 수 있다.
  3. 통합 개발 환경(IDE): IntelliJ IDEA, Eclipse, Visual Studio 등과 같은 IDE를 사용하여 Git 저장소를 생성할 수 있다.
    이러한 IDE는 Git을 내장하고 있거나 플러그인을 통해 Git을 지원하므로 통합된 개발 및 버전 관리 환경을 제공한다.

 

git 저장소

명령어

git init 새로운 Git 저장소를 초기화합니다.
git clone 원격 저장소로부터 저장소를 복제합니다.
git add 작업 디렉토리의 변경 사항을 스테이징 영역에 추가합니다.
git commit 스테이징 영역에 있는 변경 사항을 커밋합니다.
git status 작업 디렉토리와 스테이징 영역의 상태를 확인합니다.
git diff 작업 디렉토리와 스테이징 영역 또는 커밋 간의 차이를 확인합니다.
git log 커밋 히스토리를 조회합니다.
git branch 브랜치 목록을 조회하거나 새로운 브랜치를 생성합니다.
git checkout 브랜치를 전환하거나 작업 디렉토리의 파일을 복원합니다.
git merge 브랜치를 병합합니다.
git rebase 브랜치를 재배치하여 커밋 히스토리를 수정합니다.
git pull 원격 저장소에서 변경 사항을 가져와 현재 브랜치에 병합합니다.
git push 로컬 저장소의 변경 사항을 원격 저장소에 업로드합니다.
git remote 원격 저장소를 관리합니다.
git stash 현재 작업 디렉토리의 변경 사항을 임시로 저장하고 숨깁니다.
git tag 태그를 추가, 삭제, 조회합니다.
git fetch 원격 저장소에서 변경 사항을 가져오지만 병합하지 않습니다.

 

명령어 옵션

git commit -m 커밋 메시지를 직접 작성합니다.
git commit -a 변경된 모든 파일을 자동으로 스테이징하고 커밋합니다.
git commit -am 변경된 모든 파일을 자동으로 스테이징하고 커밋 메시지를 직접 작성하여 커밋합니다.
git add -u 수정된 파일과 삭제된 파일을 스테이징합니다.
git add -A 변경된 모든 파일을 스테이징합니다.
git checkout -b 새로운 브랜치를 생성하고 해당 브랜치로 전환합니다.
git branch -a 로컬 브랜치와 원격 브랜치를 모두 표시합니다.
git log --oneline 각 커밋을 한 줄로 요약하여 표시합니다.
git diff --cached 스테이징 영역과 최신 커밋 간의 차이를 확인합니다.
git pull --rebase 변경 사항을 가져오고 병합 대신 재배치하여 적용합니다.
git switch -c <branch> 새로운 브랜치를 생성하고 해당 브랜치로 전환합니다.
git switch - 이전 브랜치로 전환합니다.
git switch --create 새로운 브랜치를 생성합니다.

 

옵션을 나타내는 기호  '-'와 '--'의 차이

  • - 단축옵션. 보통 한 글자로 구성되며, 하나의 `-` 뒤에 여러 옵션을 조합하여 사용할 수 있다.
      예를 들어, `ls -l`에서 `-l`은 파일 리스트를 자세히 표시하는 옵션이다.
  • -- 긴 옵션. 주로 긴 옵션 이름이 있고, 하나의 `--` 뒤에 한 개의 긴 옵션만 사용합니다.
       예를 들어, `git commit --message`는 커밋 메시지를 지정하는 옵션이다.
-m  : --message
-c  : --create

 

커밋 메세지 생성하는 곳 바꾸기

vim상태에서 :q    -> 빠져나감

vscode를 사용하고 싶을 때 ->  git config --global core.editor "code --wait

 

Git에서 브랜치를 생성하는 명령어

git branch <branch_name> 새로운 브랜치를 생성합니다.
git checkout -b <branch_name> 새로운 브랜치를 생성하고 해당 브랜치로 전환합니다.
git switch -c <branch_name> 새로운 브랜치를 생성하고 해당 브랜치로 전환합니다.
git checkout --track <remote>/<branch_name> 원격 브랜치를 추적하는 새로운 로컬 브랜치를 생성하고 해당 브랜치로 전환합니다.
git switch --track <remote>/<branch_name> 원격 브랜치를 추적하는 새로운 로컬 브랜치를 생성하고 해당 브랜치로 전환합니다.
git checkout -b <branch_name> <start_point> 특정 커밋이나 브랜치에서 새로운 브랜치를 생성합니다.
git switch -c <branch_name> <start_point> 특정 커밋이나 브랜치에서 새로운 브랜치를 생성합니다.

 

git switch <branch_name> 브랜치가 이미 존재하는 상태에서 해당 브랜치로 전환
git checkout <commit-hash 또는 브랜치명> 커밋 해시 또는 브랜치 이름을 지정하여 해당 시점으로 이동
HEAD 포인터가 이동하며, 작업 디렉토리와 스테이징 영역의 파일도 해당 시점의 상태로 변경됨

 

master

Git 저장소의 기본 브랜치이며, 모든 다른 브랜치의 기반이 된다.

새로운 브랜치를 생성하면 해당 브랜치에서 작업하게 되고, `master` 브랜치는 이전 상태를 유지한다.

 

`master` 브랜치의 역할

 

1. 기본 브랜치 : 새로운 Git 저장소를 생성하면 자동으로 `master` 브랜치가 생성된다다. 모든 다른 브랜치들은 이 `master` 브랜치를 기반으로 생성된다.

2. 최신 상태 유지 : 일반적으로 `master` 브랜치는 최신의 안정된 상태를 나타낸다. 새로운 기능을 개발하거나 수정할 때는 새로운 브랜치를 만들어 작업하고, 작업이 완료되면 이를 `master` 브랜치에 병합하여 최신 상태를 유지한다.

3. 릴리스 관리 : `master` 브랜치는 프로젝트의 릴리스 버전을 관리하는 데 사용될 수 있다. 안정적인 코드의 버전을 유지하고, 이를 배포하는 데에 활용될 수 있다.

 

HEAD 

현재 작업 중인 브랜치의 최신 커밋
브랜치를 나누고 합치는 과정에서 HEAD의 위치를 자유자재로 바꿀 수 있다.

 

git reset 명령어

git reset --soft <commit> HEAD를 특정 커밋으로 이동시키고,
해당 커밋 이후의 변경 사항은 스테이징 영역에 유지됩니다.
git reset --mixed <commit> HEAD를 특정 커밋으로 이동시키고,
해당 커밋 이후의 변경 사항은 스테이징 영역에 유지되지 않습니다.
git reset --hard <commit> HEAD를 특정 커밋으로 이동시키고, 해당 커밋 이후의 변경 사항은 모두 삭제됩니다.
HEAD~<N> HEAD에서 상대적인 위치 N 만큼 이전의 커밋을 지정합니다.
HEAD^ HEAD에서 한 단계 이전의 커밋을 지정합니다.

 

 

아래는 git restore 명령어와 git reset 명령어의 주요 차이점을 비교

 

특성 git restore git reset
목적 파일의 상태를 이전 상태로 복원합니다. 커밋의 위치를 이동하거나 변경 사항을 제거합니다.
대상 파일에 대한 작업을 수행합니다. HEAD 또는 브랜치를 대상으로 합니다.
옵션 --source, --staged, --worktree --soft, --mixed, --hard, HEAD~<N>, HEAD^
영향 워킹 디렉토리의 파일 상태를 변경합니다. HEAD, 스테이징 영역, 워킹 디렉토리의 상태를 변경합니다.
변경 사항 파일의 내용을 이전 상태로 복원합니다. 커밋의 위치를 변경하거나 변경 사항을 제거합니다.
주요 사용 사례 실수로 변경한 파일을 이전 상태로 되돌릴 때 사용합니다. 최신 커밋을 취소하거나 특정 시점으로 되돌아가고자 할 때 사용합니다.

 

 

feature1, feature2 브랜치를 생성한 git