git은 분산 버전관리 시스템으로 소프트웨어 개발 과정에서 소스 코드의 변경 사항을 추적하고 관리하는 데 사용된다.
git을 사용하면 여러 개발자가 동시에 작업할 수 있으며, 변경 내용을 효과적으로 병합하고 관리할 수 있다.
- 자신이 원하는 디렉터리에 git 저장소를 생성
git init
위의 명령어를 디렉터리 안에. git 이 생성된다. 이 디렉터리에는 Git이 버전 관리를 하기 위한 메타 정보가 담겨있으며, 구체적으로 어떤 내용인지는 Git을 사용할 때 크게 중요하지 않다. 정말 중요한 것은 이 디렉토리를 지우는 순간, 해당 Git 저장소의 모든 변경 이력은 소실되고 일반 디렉터리로 돌아온다는 것이다.
- 로컬에 github 계정 정보 등록하기
git config --global user.name "Your Username"
git config --global user.email "your@email.com"
- 해당 등록한 계정 정보 확인 명령어
git config -l
- readme.md 파일 생성하기
readme.md 파일에 “# first-repository”를 작성한다. [#]을 통해 마크다운 해당 1 기호를 붙이면, 현재 cli에서는 적용되지 않지만 마지막 단계에서 Github 원격 저장소에 push 하면 해당 1 스타일이 적용된다.
echo "# first-repository" >> readme.md
- 현재 상태 확인
git status
- 버전관리가 필요 없는 디렉터리 정의
echo env.sh > .gitignore
cat .gitignore
- add / commit / push / pull
# 깃허브에서 내 PC 폴더로 최신 자료를 가져옴
git pull
# 수정한 파일 전체를 stage 에 올림
git add .
# add 후에 commit
git add
git commit -m "message"
# git commit + git add
git commit .
# stage 에 올라간 파일을 깃허브에 올림
git push
- github 레퍼지토리 생성
리포지토리의 이름 작성
public 체크
readme 파일 생성을 안 할 것이므로 체크 해제
create repository 클릭
- 로컬 저장소와 원격저장소 연결
git remote add origin {git copy path}
- 추가 명령어설명
명령어 | 내용 |
git help | 도움말 |
git branch git branch {브랜치명} git branch -M main git branch -d {브랜치명} |
브랜치를 조회 {브랜치명} 이라는 새로운 브랜치를 생성 마스터 브랜치의 이름을 main 으로 변경 해당 브랜치 삭제 |
git merge {브랜치명} git merge {브랜치명} –edit git merge {브랜치명} –no-edit git merge –abort |
브랜치명을 main 와 병합 ++ 병합 후 vi 편집기로 커밋 메세지를 수정 ++ 병합 후 아무것도 하지 않음 merge를 취소 |
git switch {브랜치명} git switch -c {브랜치명} |
{브랜치명}으로 이동 {브랜치명}을 생성하면서 이동 |
[switch, restore 사용 권장] git checkout {브랜치명} git checkout -b {브랜치명} |
{브랜치명} 으로 이동 {브랜치명} 이름의 새로운 브랜치를 만들고 이동 |
git clone | 원격 저장소를 복제합니다. fork 와는 다름 |
git push git push origin main git push origin {브랜치명} (주의) git push -u –force |
작업중인 자료를 업로드 작업중인 자료를 origin/main에 업로드 작업중인 자료를 origin/{브랜치명} 에 업로드 (주의) 현재 커밋된 자료를 강제로 올림 |
git difftool | 서버와 차이점 |
git fetch | 원격 저장소의 커밋을 가져오기만 하고 merge하지 않음 가져온 브랜치 내용은 origin/{브랜치} 로 저장 |
git stash git stash save git stash list git stash apply git stash apply stash@{1} git stash drop git stash drop stash@{1} git stash pop |
작업 트리의 수정 내용을 보관 작업 트리의 수정 내용을 보관 보관중인 수정 내용 목록을 출력 보관한 내용을 적용 보관한 내용 1번째를 적용 보관한 내용중 가장 최근 항목을 삭제 보관한 내용중 1번째를 삭제 보관한 내용을 apply하고 삭제 |
git log git log –pretty=oneline git log –online –all git log --pertty=format:"%h -> %an, %ar : %s --graph |
커밋 내역을 보여줌 커밋 내역을 한줄로 표기 커밋 내용을 짧게 보여줌 %h: 해시값, %an: 작성자, %ar: 시간, %s: 커밋내용, --graph: 그래프로 보기 |
touch .gitignore | 스테이징 추적&푸시를 제외할 파일을 생성 |
git clean -f | Untrackd files 를 삭제 |
git reset {파일명} git reset . git reset --hard [log주소] |
스테이지에 올라간 파일을 내림 스테이지에 올라간 모든 파일을 내림 해당 log주소로 변경 -> git push -r 로 강제 push 하면 해당 소스 변경 |
git config --global http.sslVerify false | ssl 검증 취소 |
git commit --amend | 커밋 메시지 변경 |
git remote show origin | 특정 원격저장소 정보보기 |
git rebase -i HEAD~3 | 최근 3개내역 확인 |
git config --global alias.st 'status' git config --global --unset alias.st |
alias 추가 alias 제거 |
- git add 취소하기
파일 상태를 Unstage로 변경하기
git reset HEAD <file>
명령어를 통해 git add를 취소할 수 있다.
뒤에 파일명이 없으면 add 한 파일 전체를 취소한다.
git clean 명령은 추적 중이지 않은 파일만 지우는 게 기본 동작이다. 즉,. gitignore에 명시하여 무시되는 파일은 지우지 않는다.
# 디렉터리를 제외한 파일들만 삭제
git clean -f
# 디렉터리까지 삭제
git clean -f -d
# ignored 된 파일까지 삭제
git clean -f -d -x
- git commit 취소하기
git reset --soft HEAD^
# 기본 옵션
git reset --mixed HEAD^
# 위와 동일
git reset HEAD^
# 마지막 2개의 commit을 취소
git reset HEAD~2
git reset --hard HEAD^
커밋 메세지를 잘못 적은 경우, 아래 명령어를 통해 메시지를 변경할 수 있다.
git commit --amend
- git push 취소하기
이 명령을 사용하면 자신의 local의 내용을 remote에 강제로 덮어쓰기를 하는 것이기 때문에 주의해야 한다.
-
되돌아간 commit 이후의 모든 commit 정보가 사라지기 때문에 주의해야 한다.
-
특히, 협업 프로젝트에서는 동기화 문제가 발생할 수 있으므로 팀원과 상의 후 진행하는 것이 좋다.
1. 가장 최근의 commit을 취소한다.
# 가장 최근의 commit을 취소 (기본 옵션: --mixed)
git reset HEAD^
# Reflog(브랜치와 HEAD가 지난 몇 달 동안에 가리켰었던 커밋) 목록 확인
git reflog 또는 $ git log -g
# 원하는 시점으로 워킹 디렉터리를 되돌린다.
git reset HEAD@{number} 또는 $ git reset [commit id]
git commit -m "Write commit messages"
git push -f origin [branch name]
'Embedded SW 기초' 카테고리의 다른 글
WiFi (0) | 2024.06.17 |
---|---|
컴파일러 & 크로스 컴파일 (0) | 2024.06.15 |
Peripheral과의 통신 - 3. I2C (0) | 2024.06.13 |
리눅스 명령어 & rootfs (0) | 2024.06.13 |
Peripheral과의 통신 - 2. UART (0) | 2024.06.11 |