Notice
Recent Posts
Recent Comments
Link
Gom3rye
Git 본문
728x90
반응형
Git 명령어
git init
- 디렉토리를 git과 연동
- 정상적으로 연동이 되면 .git 이라는 디렉토리가 생성된다.
- 리눅스나 맥에서는 .으로 시작하면 숨김 속성이 부여된다.
- .git 디렉토리를 삭제하면 연동이 해제된다.
- .git 디렉토리를 다른 디렉토리로 복사하게 되면 연동한 것과 동일한 효과를 가지게 된다.
사용자 정보 설정
사용자 정보 설정이 안되면 commit이 안된다.
- 저장소 별 설정
- git config user.name 이름
- git config user.email 이메일
- 설정 확인
- git config --list
- git config 항목이름
- ex. git config user.name
- 설정 해제
- git config --unset 항목
- 전체 저장소 설정을 동일하게 작성
- git config --global 항목이름값
- 이 정보는 .git 안에 config라는 파일에 작성된다.
- config 파일에는 사용자가 직접 설정한 항목만 저장된다.
- 시스템 설정 항목과 글로벌 설정 항목은 다른 곳에 저장된다.
- 설정의 우선 순위
- 로컬 → 글로벌 → 시스템
add와 commit
저장소 디렉토리에 파이썬 파일(main.py) 작성
git status: 저장소 상태 확인
- On branch master: 현재 브랜치 정보
- No commits yet: 커밋이 없음
- Untracked files: 추적 중인 파일 이외에 새로 추가된 파일을 출력
- nothing added to commit but untracked files present (use “git add” to track): 커밋할 파일 여부 → 지금은 없음(staging 영역에 파일이 없음)
스테이징 영역에 파일 추가
git commit
로컬 레포지토리에 변경 내용을 반영
- 커밋 메시지를 작성하고 ESC를 누르고 :wq! 로 빠져나오면 된다.
- staging 영역에 추가하면서 메시지를 작성: git commit -am 메시지
- 주의할 점은 untracked 파일에는 적용되지 않는다.
- a 옵션: staging area에 반영하는 것이고 m 옵션은 메시지를 바로 작성하겠다는 옵션이다.
- 한 줄 메시지는 “ “를 하지 않아도 되는데 여러 줄 메시지를 작성할 때는 반드시 “ “를 추가해줘야 한다.
status, log, show
git status
- 저장소 안에 있는 파일들의 상태 정보를 확인할 때 사용한다.
- 새로운 파일이 추가되거나(Untracked), 기존 파일에 변경이 생기거나(Modified) 하는 상황을 자동으로 감지한다.
- git status를 사용하면 저장소 내부 파일들의 상태를 출력할 수 있다.
- s 옵션을 추가하면 간결하게 출력한다.
- ??: Untracked
- M: Modified
- MM: Staging에 추가된 후 Modified
git log
커밋 내역을 역순으로 출력
- 몇 개의 내역만 출력: git log -개수
- 커밋의 상세 내역 출력: git log -p
- 숫자를 추가하면 최근 커밋부터 숫자만큼 출력
- --pretty=oneline 을 추가하면 한 줄로 출력
- --graph 옵션을 추가하면 히스토리를 그래프 형태로 출력한다.
용어
- branch: 저장소 내에서 독립적으로 이력을 관리할 수 있는 영역
- git init으로 저장소 연동을 하면 하나의 브랜치가 자동으로 만들어지는데 이 브랜치의 이름이 master이다.
- master라는 브랜치는 브랜치 이름이기도 하지만 최신 커밋을 가리키는 참조 개체이기도 한다.
- HEAD도 커밋을 가리키는 객체이다.
- HEAD가 특정 커밋을 가리키면 Working Directory의 내용이 그 커밋의 내용으로 변경된다.
git show
특정 커밋의 상세 정보를 볼 때 사용된다.
- 옵션 없이 사용하면 최신 커밋의 정보를 출력한다.
- 특정 커밋 정보를 확인하고자 할 때는 git show 커밋해시
- 해시는 앞 부분의 몇 글자만 입력해도 된다.
- HEAD의 경우 해시 대신에 HEAD라고 입력해도 된다.
git diff
파일의 수정 또는 변경 사항을 비교하는 명령
- 옵션 없이 사용하면 Unstaged 상태의 파일(Modified)와 최신 커밋을 비교한다.
- git add . 명령을 수행한 후 git diff를 해보면 Unstaged된 내용이 없기 때문에 아무것도 나오지 않는다.
- Staging Area의 파일과 최신 커밋의 비교: git diff --staged
- 커밋 간의 내용 비교: git diff 이전커밋해시 변경후커밋해시
- HEAD를 이용한 상대 경로로 비교 가능
git reset
staging을 되돌리는 명령
- Staging Area에 있는 파일 일부나 전체를 Working Directory로 이동시키는 명령
- 일부 파일만 언스테이징하고자 하는 경우는 git reset 파일경로
amend
최근에 작성한 커밋 수정
- 옵션 없이 사용하면 최근에 작성한 커밋에 현재 커밋을 덮어쓰기 한다.
- git commit --amend -m “메시지”
- 실제로는 덮어쓰기가 아니고 새로운 커밋을 만들고 이전 커밋을 삭제하는 것이다.
git checkout
커밋을 되돌리는 명령
- 형식
- git checkout 커밋 해시
- git checkout HEAD^ 또는 HEAD~되돌아갈개수
- git checkout HEAD^^ = git checkout HEAD~2 (2커밋 전)
- 최신 커밋으로 돌아가고자 하는 경우: git checkout 브랜치이름 ex. git checkout master
커밋 취소
파일 2개를 추가하고 커밋한 상태에서 파일 2개를 삭제하고자 하는 경우
- 파일을 삭제하고 커밋을 다시 수행: 커밋 이력이 남게 됨
- 2개의 파일을 추가했던 커밋을 취소
Git은 브랜치 이름으로 참조하는 커밋을 그 브랜치의 최신 커밋으로 인식한다.
- 브랜치 이름이 참조하는 커밋을 변경하면 이후에 작성된 커밋이 있더라도 무시한다.
옵션 Working Directory Staging Area Repository
| --hard | 변경 | 변경 | 변경 |
| --mixed(default) | 유지 | 변경 | 변경 |
| --soft | 유지 | 유지 | 변경 |
- 실제로 커밋이 지워진 것은 아니고 브랜치 이름이 가리키는 커밋이 변경된 것이다.
- 커밋 해시를 알고 있다면 git reset 명령으로 돌아갈 수 있다.
- reset한 거 복구도 git reset 이전커밋해시 로 가능
HEAD의 참조 이력 확인
- 커밋 해시를 기억하지 못하는 경우 HEAD의 변경을 추적해서 해시 값을 조회할 수 있다.
- git reflog
HEAD와 master(main - 브랜치 이름)
branch
- 저장소 내에 존재하는 독립적인 작업 관리 영역
- master(main)은 git init으로 생성하면 만들어지는 브랜치
- 작업 관리 영역을 구분하기 위해서 브랜치에 이름을 부여하는 것이다.
HEAD와 branch
- 브랜치 이름은 자신의 최신 커밋을 가리키는 포인터이다.
- HEAD도 특정 커밋을 가리키는 포인터
- master를 이용해서 간접 참조를 할 수도 있고 직접 참조를 할 수도 있다.
- Git은 HEAD가 참조하는 커밋의 내용에 따라 Working Directory의 파일 상태를 변경한다.
- 브랜치 이름은 변경이 가능하지만 HEAD는 공식 명칭이다.
- Git checkout을 수행하면 HEAD의 참조가 변경된다.
- checkout을 하게 되면 브랜치 이름은 그 위치 그대로 가리키고 HEAD나 checkout 한 곳으로 이동한다.
- 이렇게 되면 HEAD와 브랜치 이름이 서로 다른 커밋을 가리키는데 이러한 HEAD를 Detached Head라고 한다.
Git Hub 사용
원격 저장소 생성과 연동
- 생성: git hub 사이트에 로그인해서 Repository 생성
- 원격 저장소 등록: git remote add 저장소이름 저장소url
- git remote add origin ~~~~
- 원격 저장소 확인
- git remote -v : url 나온다.
- fetch: download하는 경로
- push: upload하는 경로 (이 2개는 거의 대부분 같겠지만 다를 수도 있다.)
- git remote : 저장소 이름만 나온다.
- git remote show 저장소이름 : 브랜치 이름까지 나온다.
- git remote -v : url 나온다.
- upstream 설정
- upstream : 브랜치 상호 추적을 위한 설정 (안 하는 경우도 많다.)
- git push -u(--set-upstream) 원격저장소이름 로컬저장소브랜치이름
- 이 명령을 수행할 때 로그인이 안 되어 있으면 로그인을 해야 한다.
- branch ‘master’ set up to track ‘origin/master’. 문장이 나오면 업스트림 설정 성공
- git remote show origin 명령으로 확인
- 원격 저장소를 확인하면 저장소에 업로드가 된다.
- 로컬에서 확인: git log --oneline
- 업스트림 설정이 되고 나면 다음부터는 git push가 git push origin master와 동일한 효과를 갖는다.
- upstream : 브랜치 상호 추적을 위한 설정 (안 하는 경우도 많다.)
Push와 Pull
파일 내용에 변화가 있으면 로컬 저장소에 commit을 수행해야 한다.
- git add .
- git commit -m “메시지”
원격 저장소에 push를 하지 않고 commit만 하고 로그를 확인해보면 저장소가 가리키는 커밋이 다르다.
- 원격 저장소에 push: git push origin master
- 업스트림 설정을 한 경우는 git push
git pull
원격 저장소에 업데이트 된 내용 가져오기
tag
- 부가 정보
- 커밋을 알기 쉽고 직관적인 이름으로 참조할 수 있도록 하는 기능
- 태그 종류
- Lightweight 태그: 태그 이름만 기록
- Annotated 태그: 태그 이름과 함께 설명, 서명, 작성자 정보, 날짜 등의 정보 포함
- Lightweight 태그 작성
- git tag 태그이름 커밋해시
- git tag v1.0.0 f3ec294
- git tag v2.0.0 2608c19
- git tag 태그이름 커밋해시
- Annotated 태그 작성
- git tag -a 태그이름 커밋해시
- 태그를 붙이면 커밋해시를 쓸 필요가 없기 때문에 버전만 기억하면 되어서 더 편해진다.
- ex) git show v2.0.0
- 또한 태그 이름으로 checkout이 가능하다.
- ex) git checkout v1.0.0
- 태그 삭제
- git tag -d 태그이름
- git tag -d v1.0.0
- git tag -d 태그이름
- 태그 업로드
- git push --tags
revert
푸시한 커밋 되돌리기
- git reset은 브랜치이름의 참조를 특정 커밋으로 되돌리는 명령→ 돌아갈 커밋해시를 대입 (새로운 커밋 안 만들어짐)
- git revert는 취소하는 내용의 새로운 커밋을 만드는 명령→ 취소하도록 할 커밋해시를 대입 (새로운 커밋이 만들어진다.)
- 여러 개의 commit을 취소하는 경우는 git revert 커밋해시1 .. 커밋해시2
- 이때 커밋해시1은 포함되지 않는다.
- 커밋은 하지 않고 파일 내용만 되돌리고자 하는 경우는 git revert -n 커밋해시
- reset을 사용해서 원격 저장소와 연동을 하는 경우) git reset을 사용하면 로컬 저장소와 원격 저장소의 커밋이 일치하지 않아서 push를 할 수 없는 상황이 벌어진다.
728x90
반응형
'현대 오토에버 클라우드 스쿨' 카테고리의 다른 글
| Git Hub Action & Jenkins (5) | 2025.07.17 |
|---|---|
| Git 협업 (2) | 2025.07.16 |
| CI/CD (1) | 2025.07.14 |
| Kubernetes- Volume API, Requests, Limits (1) | 2025.07.11 |
| Kubernetes- Volume API (3) | 2025.07.10 |