본 가이드는 Git 버전 관리 핵심 가이드 및 실전 아키텍처의 핵심 개념, 실전 구성 명령어 및 아키텍처 베스트 프랙티스를 다룹니다. 클라우드 네이티브 및 인프라 엔지니어링 실무에 즉시 활용 가능하도록 체계적으로 정리했습니다.
📑 Table of Contents
Concepts
Connection Link
Status
untracked- 새로 추가된 파일로, Git이 추적하지 않음.
git add를 실행해야staged상태로 전환됨.tracked- 이미 Git에서 추적 중인 파일.
- 세부 상태:
unstaged:tracked파일에서 변경되었으나staged상태로 추가되지 않은 변경사항.git commit -a명령어로 커밋내용에 포함가능staged: 변경사항이git add로 준비된 상태. 다음 커밋에 포함됨.
Exec
작업 공간 시작 (참고: git help tutorial)
clone
저장소를 복제해 새 디렉터리로 가져옵니다
git clone ${git_repository}
init
빈 깃 저장소를 만들거나 기존 저장소를 다시 초기화합니다
git init
config
설정 메타데이터 관리
# 기본 편집기를 vim으로 설정
git config --global core.editor "vim"
# 전체 목록 조회
git config -l
# 현재 config 조회
git config user.name
git config user.email
# 특정 property 수정 (global)
git config --global user.name {{ new name }}
git config --global user.email {{ new email }}
# config 삭제
git config --unset {{ var name }}
# fastfoward 설정
git config merge.ff false # 브랜치 병합 시 항상 병합 커밋 생성
git config pull.ff only # pull은 fast-forward로만 (빈 병합 커밋 방지)
git config --get merge.ff # false
git config --get pull.ff # only
# edit mode
git config -e
git config --global -e
# credential 삭제
git config --unset credential.helper
# credential 저장
git config --global credential.helper store
git config credential.helper store
# credential 임시저장
git config credential.helper cache
git config credential.helper 'cache --timeout 7200'
remote
업스트림 관리
# remoteName으로 repository 등록
git remote add $remoteName $remoteAddr
# origin에 repository 등록
git remote add -f origin $remoteAddr
# remote url 확인
git remote get-url $remote_name
# git remote 전체정보 확인
git remote -v
update-index
#해당 경로의 변경사항을 지속적으로 추적하지 않음
git update-index --assume-unchanged ${fileDir}
#assume-unchanged 해제
git update-index --no-assume-unchanged ${fileDir}
lfs
large format storage
# .gitattribute에 lfs 추적정보 추가
git lfs track "*.extension"
# lfs에서 로컬로 가져옴
git lfs pull
변경 사항에 대한 작업 (참고: git help everyday)
add
파일 내용을 인덱스에 추가합니다
# 깃 untracked file 전체 tracking
git add -A
# 특정 directory만 tracking
git add ${dir}
mv
파일, 디렉터리, 심볼릭 링크를 옮기거나 이름을 바꿉니다
mv와의 차이
mv ${oldfile} ${newfil}후git status
deleted: oldfile
untracked: newfile
git mv ${oldfile} ${newfile}후git status
renamed: oldfile -> newfile
git mv ${oldfile} ${newfile}
restore
Restore working tree files
#unstaged to discard changes
git restore $file
#staged to unstaged
git restore --staged $file
rm
파일을 작업 폴더에서 제거하고 인덱스에서도 제거합니다
# git index에서 제거(untracked) 및 파일시스템에서 삭제
git rm -r ${dir}
git rm ${file}
# git index에서만 제거(untracked)
### .gitignore에 추가한 후에 추적중단 등
git rm -rf --cached .
커밋 내역과 상태 보기 (참고: git help revisions)
bisect
이진 탐색으로 버그를 만들어낸 커밋을 찾습니다
# 나쁜(버그가 발생한) 커밋 지정
git bisect bad
# 좋은(버그가 없던) 커밋 지정
git bisect good ${commit_hash}
# --no-checkout 옵션은 워킹 디렉토리를 전환하지 않고 단지 커밋 해시만 추적
# 스크립트나 CI에서 별도의 체크아웃/빌드 없이 커밋 단위 비교
git bisect start --no-checkout
diff
커밋과 커밋 사이, 커밋과 작업 내용 사이 등의 바뀐 점을 봅니다
# 마지막 커밋 <-> 로컬 차이 확인
git diff ${file}
# 브랜치간 파일 차이 확인
git diff ${targetBranch} ${sourceBranch} -- ${file}
grep
패턴과 일치하는 줄을 표시합니다
#검색어와 일치하는 파일 빠르게 출력
git grep ${searchText}
#검색어와 일치하는 파일과 라인넘버를 빠르게 출력
git grep --line-number ${searchText}
log
커밋 기록을 표시합니다
# 현재 브랜치 내 커밋내역 확인
git log
# 요약으로 출력
git log --oneline
# 모든 브랜치 커밋내역 확인
git log --all
# 모든 브랜치에서 해당 머신기준 dir 패스를 포함하는 커밋이력 확인 (디렉토리의 최신커밋 브랜치 찾기)
git log --all -- ${dir_path}
# 브랜치, 병합 흐름을 시각화
git log --graph
# 태그 등을 같이 표시
git log --decorate
# 다 보기
git log --oneline --decorate --graph --all
show
여러가지 종류의 오브젝트를 표시합니다
# commitId로 변경내역 확인하기 (pagered)
git show ${commitId}
status
작업 폴더 상태를 표시합니다
git status
커밋 내역을 키우고, 표시하고, 조작하기
backfill
Download missing objects in a partial clone
# 부분클론으로 인해 발생한 누락 blob을 채워서 업스트림간의 성능저하를 개선함.
git backfill
branch
브랜치를 만들거나, 삭제하거나, 목록을 출력합니다
# 현재 브랜치 확인 (로컬)
git branch
# 브랜치 생성 (로컬)
git branch ${branchname}
# 브랜치 이름 변경 (로컬)
git branch -m ${before_branchname} ${new_branchname}
# 브랜치 삭제 (로컬) -- 병합된 브랜치만 삭제함
git branch -d ${branchname}
# 브랜치 삭제 (로컬)
git branch -D ${branchname}
# 리모트와의 연결을 해제
git branch --unset-upstream
# 리모트(origin)과 연결
git branch --set-upstream-to=origin/$branchname
# 리모트 해제 후 연결 (리모트정보 변경)
git branch -u origin/$branchname
# 추적 remote 브랜치 확인
git branch -vv
commit
바뀐 사항을 저장소에 기록합니다
# commit 메세지 입력
git commit -m "${message}"
# 마지막 커밋메세지 변경 and 현재 status를 기존 커밋에 포함
git commit --amend -m "$message"
revert
지정된 커밋을 네거티브하는 커밋을 만듭니다.
revert 순서는 커밋순서의 역순: HEAD에 가까운 커밋부터
# 취소커밋 생성
git revert $commitid
# 취소커밋 생성 (여러건의 revert 커밋)
git revert $commitid1 $commitid2 $commitid3
# 커밋 생성하지않고 로컬에 스테이지.
git revert -n $commitid3 $commitid2 $commitid1
# merge커밋 되돌리기
## 일반적인 상황: 부모커밋을 기준으로 자식커밋을 되돌림 (main <- feature 병합 이후 feature revert)
git revert -m1 $merge_commitid
## 예외적인 상황: 자식커밋을 기준으로 부모커밋을 되돌림
git revert -m2 $merge_commitid
merge
여러 개의 개발 내역을 하나로 합칩니다
# 다른 브랜치의 변경사항을 현재 브랜치로 병합하기: history를 공유하는 내용만 가능
git merge $branch
rebase
커밋을 다른 베이스 끝의 최상위에서 적용합니다
## 여러 커밋 한줄로 병합 (상위 2줄)
git rebase -i HEAD~2
>>>
pick c16a048 bitnami charts: prometheus, grafana, rabbitmq
pick 32aea8b dsfsdfsd
->
# 합쳐져서 사라질 메세지를 s로 변경
pick c16a048 bitnami charts: prometheus, grafana, rabbitmq
s 32aea8b dsfsdfsd
<<<
## 커밋 drop (상위 1줄)
git rebase -i HEAD~1
>>>
pick c16a048 bitnami charts: prometheus, grafana, rabbitmq
->
# 사라질 메세지를 drop으로 변경
drop c16a048 bitnami charts: prometheus, grafana, rabbitmq
<<<
# rabase 취소
git rebase --abor
reset
현재 HEAD를 지정한 상태로 재설정화합니다
# 마지막 커밋 제거
git reset HEAD^
# 변경사항 롤백하기 (현재 커밋 기준)
git reset --hard
# 특정 커밋으로 되돌리기 (공유브랜치에서는 위험할 수 있음)
git reset --hard ${commitId}
checkout
브랜치 혹은 특정 커밋 기반 파일 복원
# 해당 브랜치로 변경
git checkout ${branchname}
# 현재 브랜치에서 신규 브랜치 생성성 후 신규 브랜치로 변경
git checkout -b ${new_branchname}
# root 브랜치에서 신규 브랜치 생성 후 신규 브랜치로 변경
git checkout -b ${new_branchname} ${root_branchname}
# commitID를 이용하여 특정 커밋 파일 가져오거나 되돌리기 (현재 브랜치 혹은 다른 브랜치)
git checkout ${commitId} ${file_or_dir}
# 다른 브랜치의 (최신 커밋) 특정 파일 가져오기
git checkout ${otherBranchname} -- ${file}
# 다른 브랜치의 (최신 커밋) 특정 파일 가져오기 (현재경로 기준 명시)
git checkout ${otherBranchname} ${file_or_dir}
cherry-pick
커밋 히스토리를 공유하지 않는 브랜치 간 커밋 복제
# 특정 커밋 변경사항을 다른 브랜치에서 가져오기
git cherry-pick $commitId
# 체리픽 취소
git cherry-pick --abort
stash
커밋 히스토리에 영향가지 않도록 현재 스테이지 임시 저장
# stash 배열에 추가
git stash
# 메세지 적으면서 stash
git stash -m "${message}"
# list 확인
git stash list
# unstash
git stash pop
switch
Switch branches
checkout이 특정 파일복원이나 커밋ID로 이동 등의 다양한 기능을 포함하고있으므로, 모던한 디자인을 위하여 branch 특화 명령어가 생김.
# 해당 브랜치로 변경
git switch ${branchname}
# 현재 브랜치에서 신규 브랜치 생성성 후 신규 브랜치로 변경
git switch -c ${new_branchname}
# root 브랜치에서 신규 브랜치 생성 후 신규 브랜치로 변경
git switch -c ${new_branchname} ${root_branchname}
tag
태그를 만들거나, 표시하거나, 삭제하거나, GPG 서명을 검증합니다
git tag ${tagname}
worktree
여러 브랜치를 파일시스템으로 관리
워크트리에 등록된 브랜치로 git switch 불가.
fatal: '${branchname}' is already used by worktree at '${workdir}'
# 등록된 워크트리 목록 조회
git worktree list
# 현재 브랜치 기준으로 해당 경로에 신규 작업경로를 생성하고 워크트리에 저장
git worktree add ${git_root}/../${new_dir}
git worktree add ${new_workdir}
# 워크트리를 생성할때에 현재 브랜치 기준으로 기존브랜치 리셋 혹은 신규브랜치를 생성
git worktree add ${new_workdir} -B ${branchname}
# 워크트리를 생성할때에 현재 브랜치 기준으로 신규브랜치를 생성
git worktree add ${new_workdir} -b ${new_branchname}
# 워크트리를 삭제
git worktree remove ${workdir}
협동 작업 (참고: git help workflows)
fetch
다른 저장소에서 오브젝트와 레퍼런스를 다운로드합니다
git fetch
pull
다른 저장소 또는 다른 로컬 브랜치에서 가져오거나 통합합니다
git pull
push
원격 레퍼런스 및 그와 관련된 오브젝트를 업데이트합니다
# 현재 로컬커밋 기준 push
git push
# 신규로컬 브랜치 upstream에 push
git push --set-upstream origin ${branchname}
# 업스트림 브랜치 삭제
git push origin --delete ${branchname}
# 업스트림에 강제로 PUSH (기존 커밋내역이 Push된 경우)
git push --force-with-lease origin $branch
# 업스트림에 커밋id 동일할 경우 replace
git push --all --force
git push --tags --force
The Git concept guides are
# 가이드 목록 조회
git --help -g
# 개발자를 위한 깃 핵심 따라하기 문서
git --help core-tutorial
# Providing usernames and passwords to Git
git --help credentials
# CVS 사용자를 위한 깃
git --help cvs-migration
# diff 출력 미세 조정
git --help diffcore
# 매일매일 유용하게 사용할 최소한의 깃 명령어 모음
git --help everyday
# Frequently asked questions about using Git
git --help faq
# 깃 용어 사전
git --help glossary
# 깃 네임스페이스
git --help namespaces
# Helper programs to interact with remote repositories
git --help remote-helpers
# Mounting one repository inside another
git --help submodules
# 깃 따라하기 안내서
git --help tutorial
# 깃 따라하기 안내서: 2부
git --help tutorial-2
# 추천하는 깃 활용 작업 순서의 개요
git --help workflows
All Features
주요 사용자용 명령
add 파일 내용을 인덱스에 추가합니다
am 메일함에서 연속된 패치를 적용합니다
archive 지정한 트리에 들어 있는 파일의 아카이브를 만듭니다
backfill Download missing objects in a partial clone
bisect 이진 탐색으로 버그를 만들어낸 커밋을 찾습니다
branch 브랜치를 만들거나, 삭제하거나, 목록을 출력합니다
bundle 아카이브 형태로 오브젝트와 레퍼런스를 옮깁니다
checkout 브랜치를 전환하거나 작업 파일을 복구합니다
cherry-pick 기존 커밋으로 발생한 변경 사항을 적용합니다
citool git-commit의 그래픽 대체 버전
clean 작업 폴더에서 추적되지 않는 파일을 제거합니다
clone 저장소를 복제해 새 디렉터리로 가져옵니다
commit 바뀐 사항을 저장소에 기록합니다
describe 사용 가능한 레퍼런스를 기준으로 오브젝트에 읽을 수 있는 이름을 부여합니다
diff 커밋과 커밋 사이, 커밋과 작업 내용 사이 등의 바뀐 점을 봅니다
fetch 다른 저장소에서 오브젝트와 레퍼런스를 다운로드합니다
format-patch 메일 제출 용도로 패치를 준비합니다
gc 불필요한 파일을 지우고 로컬 저장소를 최적화합니다
gitk 깃 저장소 살펴보기
grep 패턴과 일치하는 줄을 표시합니다
gui 깃의 포터블 그래픽 인터페이스
init 빈 깃 저장소를 만들거나 기존 저장소를 다시 초기화합니다
log 커밋 기록을 표시합니다
maintenance Run tasks to optimize Git repository data
merge 여러 개의 개발 내역을 하나로 합칩니다
mv 파일, 디렉터리, 심볼릭 링크를 옮기거나 이름을 바꿉니다
notes 오브젝트 노트를 추가하거나 살펴봅니다
pull 다른 저장소 또는 다른 로컬 브랜치에서 가져오거나 통합합니다
push 원격 레퍼런스 및 그와 관련된 오브젝트를 업데이트합니다
range-diff Compare two commit ranges (e.g. two versions of a branch)
rebase 커밋을 다른 베이스 끝의 최상위에서 적용합니다
reset 현재 HEAD를 지정한 상태로 재설정화합니다
restore Restore working tree files
revert 기존 커밋을 되돌립니다
rm 파일을 작업 폴더에서 제거하고 인덱스에서도 제거합니다
scalar A tool for managing large Git repositories
shortlog 'git log' 출력을 요약합니다
show 여러가지 종류의 오브젝트를 표시합니다
sparse-checkout Reduce your working tree to a subset of tracked files
stash 작업 폴더의 변경 사항을 임시로 다른 곳에 저장합니다
status 작업 폴더 상태를 표시합니다
submodule 하위 모듈을 초기화하거나, 업데이트하거나, 조사합니다
switch Switch branches
tag 태그를 만들거나, 표시하거나, 삭제하거나, GPG 서명을 검증합니다
worktree 여러 개의 작업 폴더를 관리합니다
보조 명령 / 조작 기능
config 저장소 옵션 또는 전체 옵션을 보거나 설정합니다
fast-export 깃 데이터 내보내기
fast-import 고속 깃 데이터 가져오기 백엔드
filter-branch 리모트 브랜치
mergetool 병합 충돌 상황에서 병합 충돌 해결 도구를 실행합니다
pack-refs 효율적인 저장소 접근을 위해 헤드와 태그를 묶습니다
prune 오브젝트 데이터베이스에서 도달할 수 없는 오브젝트를 모두 잘라냅니다
reflog reflog 정보를 관리합니다
refs Low-level access to refs
remote 추적하는 저장소 모음을 관리합니다
repack 저장소의 묶여지지 않은 오브젝트를 묶습니다
replace 오브젝트를 바꾸는 레퍼런스를 만들거나, 표시하거나, 삭제합니다
보조 명령 / 정보 획득 기능
annotate 파일 줄마다 커밋 정보를 표시합니다
blame 파일 줄마다 끝에 마지막으로 수정한 리비전과 작성자를 표시합니다
bugreport Collect information for user to file a bug report
count-objects 묶여지지 않은 오브젝트의 개수 및 그 디스크 사용량을 측정합니다
diagnose Generate a zip archive of diagnostic information
difftool 일반적인 diff 도구를 사용해 변경 사항을 표시합니다
fsck 연결을 확인하고 데이터베이스의 오브젝트가 올바른지 확인합니다
gitweb 깃 웹 인터페이스 (깃 저장소에 대한 웹 프론트엔드)
help 깃의 도움말 정보를 표시합니다
instaweb 내 작업 저장소를 gitweb에서 즉시 살펴봅니다
merge-tree Perform merge without touching index or working tree
rerere 충돌하는 병합의 기록된 해결 방법을 다시 사용합니다
show-branch 브랜치 목록과 그 커밋을 표시합니다
verify-commit 커밋의 GPG 서명을 확인합니다
verify-tag 태그의 GPG 서명을 확인합니다
version Display version information about Git
whatchanged Show logs with differences each commit introduces
다른 사람과 소통
archimport Import a GNU Arch repository into Git
cvsexportcommit 하나의 커밋을 CVS 체크아웃으로 내보냅니다
cvsimport 다른 소스 코드 관리 시스템에서 데이터 가져오기
cvsserver 깃용 CVS 서버 에뮬레이터
imap-send 표준입력에서 패치 모음을 읽어 IMAP 폴더로 보냅니다
p4 Perforce 저장소에서 가져오거나 저장소로 제출합니다
quiltimport 현재 브랜치에 quilt 패치 모음을 적용합니다
request-pull 예정된 변경 사항의 요약을 만듭니다
send-email 패치 모음을 메일로 보냅니다
svn 서브버전 저장소와 깃 사이의 양방향 동작
저수준 명령/ 조작 기능
apply 패치를 파일 및/또는 인덱스에 적용합니다
checkout-index 인덱스의 파일을 작업 폴더로 복사합니다
commit-graph Write and verify Git commit-graph files
commit-tree 새 커밋 오브젝트를 만듭니다
hash-object Compute object ID and optionally create an object from a file
index-pack 기존 묶음 아카이브에 대한 묶음 인덱스 파일을 만듭니다
merge-file 3-방향 파일 병합을 실행합니다
merge-index 병합이 필요한 파일에 대해 병합을 실행합니다
mktag Creates a tag object with extra validation
mktree ls-tree 포맷의 텍스트에서 tree-object를 만듭니다
multi-pack-index Write and verify multi-pack-indexes
pack-objects 오브젝트의 묶음 아카이브를 만듭니다
prune-packed 묶음 파일에 이미 들어 있는 오브젝트를 추가로 제거합니다
read-tree 트리 정보를 인덱스로 읽습니다
replay EXPERIMENTAL: Replay commits on a new base, works with bare repos too
symbolic-ref 심볼릭 레퍼런스를 읽고, 수정하고, 삭제합니다
unpack-objects 묶음 아카이브에서 오브젝트를 풀어냅니다
update-index 작업 폴더에서 파일 내용을 인덱스에 등록합니다
update-ref 레퍼런스에 저장된 오브젝트 이름을 안전하게 업데이트합니다
write-tree 현재 인덱스에서 트리 오브젝트를 만듭니다
보조 명령 / 정보 획득 기능
cat-file Provide contents or details of repository objects
cherry 업스트림에 적용해야 할 커밋을 찾습니다
diff-files 작업 폴더와 인덱스의 파일을 비교합니다
diff-index 트리를 작업 폴더나 인덱스와 비교합니다
diff-pairs Compare the content and mode of provided blob pairs
diff-tree 두 개의 트리 오브젝트에 있는 내용과 블롭의 모드를 비교합니다
for-each-ref 각 레퍼런스의 정보를 출력합니다
for-each-repo Run a Git command on a list of repositories
get-tar-commit-id git-archive로 만든 아카이브에서 커밋 ID를 추출합니다
ls-files 인덱스와 작업 폴더의 파일에 대한 정보를 표시합니다
ls-remote 원격 저장소의 레퍼런스를 열거합니다
ls-tree 트리 오브젝트의 내용을 열거합니다
merge-base 병합에 사용할 최선의 공통 과거 커밋을 찾습니다
name-rev 주어진 리비전에 대한 심볼 이름을 찾습니다
pack-redundant 중복된 묶음 파일을 찾습니다
rev-list 시간 반대 순서에 따라 커밋 오브젝트를 열거합니다
rev-parse 파라미터를 찾아내서 조정합니다
show-index 묶여진 아카이브 인덱스를 표시합니다
show-ref 로컬 저장소의 레퍼런스를 열거합니다
unpack-file 블롭의 내용으로 임시 파일을 만듭니다
var 깃의 논리적 변수를 표시합니다
verify-pack 묶음 깃 아카이브 파일을 검증합니다
Low-level Commands / Syncing Repositories
daemon 깃 저장소에 대한 아주 간단한 서버
fetch-pack 다른 저장소에서 없는 오브젝트를 다운로드합니다
http-backend 깃 HTTP 프로토콜의 서버측 구현
send-pack 오브젝트를 깃 프로토콜을 통해 다른 저장소로 푸시합니다
update-server-info 단순 서버에 도움을 주도록 보조 정보 파일을 업데이트합니다
보조 명령 / 내부 사용 기능
check-attr gitattributes 정보를 표시합니다
check-ignore gitignore / 제외할 파일을 디버깅합니다
check-mailmap 연락처의 전체 이름과 메일 주소를 표시합니다
check-ref-format 레퍼런스 이름의 형식이 올바른지 확인합니다
column 데이터를 여러 열로 표시합니다
credential 사용자 비밀 정보를 가져오고 저장합니다
credential-cache 메모리에 임시로 암호 저장하는 도움 명령
credential-store 비밀 정보를 디스크에 저장하는 도움 명령
fmt-merge-msg 병합 커밋 메시지를 만듭니다
hook Run git hooks
interpret-trailers Add or parse structured information in commit messages
mailinfo 하나의 메일 메시지에서 패치와 작성자 정보를 뽑아냅니다
mailsplit 간단한 유닉스 mbox 쪼개기 프로그램
merge-one-file git-merge-index와 같이 사용하는 기본 도움 프로그램
patch-id 패치에 대한 유일한 ID를 계산합니다
sh-i18n 셸 스크립트를 위한 깃의 국제화 준비 코드
sh-setup 공통 깃 셸 스크립트 준비 코드
stripspace 불필요한 공백 문자를 제거합니다
User-facing repository, command and file interfaces
attributes 경로마다 속성 정의하기
cli 깃 명령행 인터페이스 및 관습
hooks 깃에서 사용하는 후크
ignore 의도적으로 추적하지 않는 파일을 무시하게 지정하기
mailmap Map author/committer names and/or E-Mail addresses
modules 하위 모듈 속성 정의하기
repository-layout 깃 저장소 구조
revisions 깃의 리비전 및 범위를 지정하기
Developer-facing file formats, protocols and other interfaces
format-bundle The bundle file format
format-chunk Chunk-based file formats
format-commit-graph Git commit-graph format
format-index Git index format
format-pack Git pack format
format-signature Git cryptographic signature formats
protocol-capabilities Protocol v0 and v1 capabilities
protocol-common Things common to various protocols
protocol-http Git HTTP-based protocols
protocol-pack How packs are transferred over-the-wire
protocol-v2 Git Wire Protocol, Version 2
Features
SSH 를 통한 Git 작업시 ~/.ssh 외의 파일 지정
GIT_SSH_COMMAND="ssh -i ./opnsense" git clone [email protected]:fredric18/opnsense-backup.git
상위 두번째에 있는 커밋메세지 변경
#1. rebase 명령
git rebase -i HEAD~2
>>>
#before
pick 41737dd Change Dir Structure
pick 602a1c8 Change Manifests
#after
e 41737dd Change Dir Structure
pick 602a1c8 Change Manifests
<<<
#cursor가 아래로 내려옴 확인
git log
#2. 커밋메세지 변경
git commit --amend
#3. 커서 제위치로 변경
git rebase --continue
다른 브랜치에서 변경사항 커밋
git stash
git checkout ${other-branch}
git stash pop
특정 리비전의 directory 가져오기
git log #리비전id 확인
git checkout ${commitId} ${dir}
특정 디렉토리의 최신 커밋을 다른 브랜치에서 찾아 가져오기
git log --all -- ${dir}
git checkout ${commitId} ${dir}
git add ${dir}
git commit
외부 리포지토리에서 가져온 디렉터리 git 종속성 제거
# 깃디렉터리 삭제
rm -rf .git
# 캐시 삭제
git rm --cached . -rf
git add -A
git commit
git pull
git push
외부 리포지토리에서 가져온 디렉터리 다른 리포지토리에 push (히스토리 유지)
#사전에 리포지토리는 생성완료 되어있어야 가능
#기존 origin 확인 및 변경
git remote -v
git remote rename origin origin-old
git remote add origin $new_repository
git remote -v
#새로운 origin에 push (전체 브랜치)
git push -u origin --all
#새로운 origin에 push (태그)
git push -u origin --tag
#새로운 origin에 push (특정 브랜치)
git push -u origin $branch
포크한 리포지토리를 private repository로 재구성
#1. github에서 private repository를 생성
#2. fork한 repository bare clone
git clone --bare $forked_repo_url.git
cd $forked_repo.git
#3. private repository에 mirror push
git push --mirror $private_repo_url.git
포크한 리포지토리를 최신으로 동기화
git remote -v
git remote add upstream $upsteamrepository
git fetch upstream
git checkout main
git merge upstream/main
git push origin main
PR 생성
#포크된 브랜치 생성 후 clone
git remote -v
git remote add upstream $upsteamrepository
git checkout -b features/$mybranch
#수정 작업 후 push
git push origin $mybranch
#github.com에서 pull request 생성
signed off
#commit message 마지막에 지정
"Signed-off-by: Author Name <[email protected]>"
#혹은 자동
git commit -s
git commit -sm "$commitmessage"
#기존 업로드/push한 커밋 강제변경
git rebase HEAD~1 --signoff
git push --force-with-lease origin $branch
기존 PUSH 강제 수정 (브랜치 내 충돌사항이 없을 경우에만 가능)
#수정사항 commit 및 squash
git add $something
git commit
git rebase -i HEAD~2
#1. vim에서 맨 위를 제외하고 아래의 커밋을 pick -> s로 변경
#2. commitmessage 삭제
git push --force-with-lease origin $branch
기존 PUSH 강제 수정 (마지막 커밋대상)
git add $something
git commit --amend
git push --all --force
git push --tags --force
잘못된 push 삭제
- 삭제 push
git reset --hard HEAD~1
git push origin HEAD --force
- Revert
git revert HEAD
git push origin HEAD
브랜치를 rename한 후 리모트에 반영
# 현재 브랜치 변경
git branch -m ${old-branch-name} ${new-branch-name}
# 기존 원격 브랜치 삭제
git push origin --delete ${old-branch-name}
# 새로운 이름으로 원격에 푸시
git push origin ${new-branch-name}
여러건의 커밋을 1건의 revert커밋으로 생성
# 커밋 생성하지않고 로컬에 스테이지.
git revert -n $commitid3 $commitid2 $commitid1
git commit -m "revert \"$commitid3 $commitid2 $commitid1\""
안전하게 Upstream의 메타데이터를 현재 브랜치에 초기화 (로컬 장애 대응)
git worktree로 인한 장애 대응시 작성됨
target_branch=develop
# 1. target_branch 브랜치로 체크아웃
git checkout ${target_branch}
# 2. 로컬 target_branch을 upstream과 동기화 (리셋)
git fetch origin
git reset --hard origin/${target_branch}
# 4. 필요 시 로컬 reflog/HEAD 로그 초기화
git reflog expire --expire=now --all
git gc --prune=now
브랜치 삭제 장애시 이름변경 후 삭제
git branch -m ${before_branchname} ${new_branchname}
git branch -D ${new_branchname}
Remote origin 주소 변경
git_provider_url=(github.com bitbucket.org ...)
# to https
git remote set-url origin https://${git_user}@${git_provider_url}/${vendor_name}/${repository_name}.git
# to ssh
git remote set-url origin git@${git_provider_url}:${vendor_name}/${repository_name}.git
Leave a Reply