Git 정리

  • by

repository=리포지토리

파일을 변경 내역에 따라 구분하여 저장
1. 리모트 리포지토리 – 파일이 서버상에서 일괄 관리되는 리포지토리(github) – 이를 통해 공유에 의한 공동 작업이 이루어진다
2. 지역 리포지토리 = 개별 PC에 파일이 저장되는 리포지토리(내 PC)
– 내 PC의 로컬 리포지토리에서 작업 – 원격 저장소에 업로드하거나 타인의 작업 내용을 다운로드하여 사용

commit=작업 공간의 모든 파일과 파일 데이터를 사진처럼 복사하여 리포지토리에 저장
=작업 공간의 특정 시점 스냅샷

커밋 = 커밋을 리포지토리에 추가합니다.

= 현재 작업 공간의 상태를 커밋으로 설정하고 저장소에 저장한다는 의미 – 이전 커밋에서 현재 상태까지 변경 내역이 기록된 커밋 생성
커밋 당 commit Hash 값이 주어지므로 각 커밋을 구분합니다.


commit 은 commit 메시지가 반드시 필요하지 않은 경우 실행 x
커밋끼리는 체인 구조를 형성

branch=원래 버전에서 분리된 것(분기) – 새 버전=버전 관리 중심
분기간의 독립된 영역이기 때문에 영향을 받지 않고, 복수의 작업을 동시에 진행이 가능.
변경사항을 원래 버전과 비교하여 하나의 새 버전으로 결합할 수 있습니다.

master branch=기본 브랜치에 붙이는 이름=완성된 배포 버전이라는 의미도 있다.


HEAD=지금 작업 중인 브랜치를 가리킵니다.


work tree(working space) = 개인용 컴퓨터 환경에서 소스 코드를 편집하는 일반적인 프로젝트 폴더

stage = 작업공간에서 변경이 발생한 파일을 다음 커밋에 포함하도록 예약합니다.

(추적이라고 함)
index=staging area
색인 등록 = stage
색인에서 제외 = unstage
작업 트리<->색인<->스토어

github = 원격 스토리지 호스팅을 (다운로드) 지원하는 사이트

remote

git config는 설정 창으로 볼 수 있지만,
git config –global alias.st status를 지정하면 앞으로 st를 입력 할 때
자동으로 status로 바꾸고 싶다는 의미를 의미한다.


이 기능을 사용하면 자체 단축키 설정이 가능합니다.


git config –global -e에서 편집기를 사용하여 config 설정을 지정할 수 있습니다.

local 스토리지에서 원격 스토리지로 저장하는 방법(upload)

1.working directory
git add
git add * = 모든 파일을 add하십시오 (삭제 한 것도 듣기)
git add . = 존재하는 모든 파일을 add
2.stage
git reset으로 unstage 가능
git commit = 그냥 vscode에서 열고 필요한 commit 메시지를 저장하고 등록합니다.


git commit -m “메시지”” = commit 메시지로 저장
git commit -am “message” = a 옵션이 파일 자동 stage 기능을 하고 add 없이 commit 된다고 한다.

3.directory
directory에 업로드된 파일은 버전별로 저장됩니다.

언제든지 실행 취소 가능
그래서 history와 이야기했습니다.


적당히 작은 단위로 나누어 보존해, 커밋 내용을 내용에 맞추도록 해 주지 않으면 관리의 용이함.
git push 또는 git push origin master를 통해 원격 저장소에 저장합니다.

(내 브랜치 이름이 메인으로 변경되었습니다)

4.remote save
원격 보존소에 보존된 상태를 가진다.

hash 코드 값으로 언제 누가 commit했는지를 git log에 기록되어 있다.

(commit hash도 확인 가능)
되돌리려면 이 값을 사용하여 호출할 수 있습니다.

##local repository를 원격 저장소에 연결하는 방법에는 두 가지가 있습니다(다운로드).
###1.
git init = 프로젝트 시작
git rempte add origin(URL) = url을 원격 저장소로 지정합니다.


git pull origin master = 원격 저장소를 현재 master로 병합합니다.


###2.
이것을 git clone (URL)에서 생략 가능한 것.
git remote-v로 어떤 원격 스토리지에 연결되어 있는지 확인 가능

git reset은 나중에 커밋 주소를 넣으면 해당 위치로 재설정 할 수 있습니다.


git reset (hash 주소 값) 또는
git reset HEAD~1 (=HEAD (위치한 커밋의) 단계 1 뒤에 리셋하십시오) 숫자에 의하여 리셋하는 위치가 변화한다.

.gitignore 확장자를 가진 파일을 만들고 메모장에 열고 git add . 때때로 모든 파일을 이동하지 않도록 제한하는 거대한 역할로 사용할 수 있습니다.


위의 괄호를 해결하기 위해 git rm -r –cached . 에서 현재 리포지토리에 있는 파일을 인덱스에서 일괄 삭제 처리하여 사용하면 이미 커밋된 파일도 gitignore에 반영이 가능.

git pull을 통해 원격 리포지토리에서 현재 로컬 리포지토리로 분기를 다운로드하는 명령
git pull 또는 git pull origin master 사용 (master를 main으로 변경했습니다)

conflict

같은 파일이 원격 저장소와 로컬 저장소에 다른 내용을 저장하면 어떻게됩니까? (동시에 수정됨)
둘은 다른 파일이므로 conflict가 발생하고 해결하기 위해 git pull을 통해 원격 저장소의 동일한 파일을로드합니다.


이 경우 두 버전 간의 차이를 자동으로 조정합니다.

##git branch
git branch = 존재하는 branch 확인
git branch “브랜치 이름” = 새로운 branch 추가
git branch -m “브랜치 이름” “변경 이름” =branch 이름 바꾸기
git branch -d “브랜치 이름” =branch 삭제
git checkout “브랜치 이름” = branch로 이동
git checkout -b “브랜치 이름” = 브랜치를 만들면서 동시에 전환 가능
브랜치의 경우 동일한 파일을 공유하는 관계에서 성공적으로 이동할 수 있지만 추가 파일이 있거나 삭제된 파일이 존재하고 브랜치 간에 파일 보존 차이가 있는 경우 현재 진행 중인 커밋 처리하지 않으면 분기 이동이 불가능합니다.


이를 해결하기 위해
git stash=현재 작업 중 상황을 일시적으로 저장하고 작업 트리를 정리(HEAD)
그 후 브랜치 변경은 자유롭게 가능
git stash list=임시 저장 목록 확인
git stash apply “호출하는 인덱스”시에 git stash list에서 확인한 인덱스에 따라 일시적으로 저장된 내용을 호출한다.

브랜치를 맞추는 방법

이미지
1. 기록을 남기면서 정렬(자동, 수동으로 구분됨)
1.1Fast-forward
git merge “브랜치 이름” = 브랜치를 맞추는 명령 = 그 브랜치를 HEAD 브랜치로 커밋 내용을 추가하고 맞추기
두 가지 중 하나가 수정 x이고 하나가 수정 o인 경우
1.2 Recursive strategy
마찬가지로 git merge “브랜치 이름”으로 브랜치를 맞춰줍니다.

저장된다는 차이가 있습니다.


두 가지 모두 수정이 있었지만 다른 파일에 대한 수정이었습니다 (conflict가 아님).

1.3 수동 병합 – conflict 발생하면 자동 병합이 불가능하며 conflict 해결 후에 병합해야합니다.


마찬가지로 git merge “브랜치 이름”으로 병합을 시작하고 충돌이 발생하여 merge가 불가능하다는 메시지를 볼 수 있습니다.

이것을 현재 위치(HEAD) 브랜치로부터 충돌 파일에 액세스 해 충돌 내용을 수정한 후, 그 내용에 대한 add, commit를 적용하면 merge가 완료한다(완료하면 HEAD 브랜치 옆에 |MERGING이라고 표시되어 있었다) 사라진다.

)

2. 한 줄에 맞추기
복잡한 분기 병합의 기록은 가독성이 나쁘다.

그래서 사용하는 것이 rebase다.


rebase = 별도의 브랜치 레코드를 남기지 않고 공통 조상 커밋을 기반으로 중간에 커밋을 삽입하여 한 줄로 보입니다.


이미지
git rebase “브랜치명” = 현재 HEAD 브랜치에 대상 브랜치 간의 공통 커밋 후에 해당 커밋을 배치한다
종래는 HEAD의 내용이 전에 보존되어 나머지가 나중에 보존되어 충돌 내용을 검토되지만, rebase의 경우 반대로 행해져 그 이유는 합쳐지는 branch가 중간에 인터럽트되어 commit되는 형태이기 때문에 이다.


마찬가지로 충돌을 정리한 후, 변경을 staging(add) 하고 나서 재커밋하는 대신 git rebase –continue 명령을 사용하면 현재의 rebase 내용을 반영하게 되지만 마무리된다.

## 잘못된 커밋 변경
git commit –amend = 연결된 편집기로 자동 이동하여 커밋을 변경할 수 있습니다.


이미지

git reset VS git revert

git reset = commit 이력 자체를 제거하기 때문에 원격 저장소와의 충돌이 발생하거나 commit history를 잃을 위험이 있습니다.


git revert = commit 내용을 삭제하는 새로운 commit 만들기 – 커밋 내역을 유지하고 덮어쓰기
git revert “커밋 주소”