(마지막 업데이트: 23.05.15)
오소입 수업 중 git 내용 정리하기
학기 끝나면 올리려고 했는데, 그냥 올려야겟따
GIT
git 이란? 소스코드를 관리하는 형상관리시스템(분산버전관리시스템) (컴퓨터 파일의 변경사항을 추적하고, 여러 명의 사용자들 간의 해당 파일들의 작업을 조율한다.)
- 소프트웨어 개발에서 소스코드를 관리하는데 주로 사용한다.
- 기하학적 불변 이론을 바탕으로 설계했다. => hashing
- git server, 내 local, ssh server 는 모두 독립적인 공간이다. 수정한 내용을 동기화(?)해주려면 push/pull 해주어야한다. 충돌이 일어나기도 하는데, 이는 해결가능하다 -> 뒷부분에 설명
- git 의 장점: 분산 개발 용이성, 개발자들을 관리할 수 있는 확장성, 신속하고 효율적인 수행 성능, 무결성과 신뢰성 유지
간단하게 git의 과정에 대해 설명하자면 아래와 같다.
git clone을 해서 git server에 있는 것을 ssh 서버로 가져왔다고 가정한다.
ssh 서버에서 해당 레포지토리의 파일을 수정한다. git add 하면 stage에 올라가고, git commit 하면 repository에 올라간다.
해당 commit을 git server로 전송하는 것은 git push, git server 에 있는 것을 다시 가져오는 것은 git pull 이다.
Git branch, stream, fork
git fork 와 git branch 를 사용하는 상황의 차이점은?
- fork: 큰 규모일 때, 독자적인 sw 개발을 위해서, 코드를 아예 다시 짜려고 할 때
- branch: 간단한 버그 수정, 하나의 소프트웨어를 여러 사람이 나눠서 다룰 때
git 명령어 - setup
- global 옵션을 사용하면, 해당 설정을 다시 하지 않아도 됨. .gitconfig 파일이 생성되며 그 안에 내용 기록됨.
- global 옵션을 빼면, 해당 레포지토리 안에서 명령어를 입력해야하며, .git/config 파일에 내용이 기록됨.
- 처음 commit을 하면 에러가 발생하고, 아래 명령어를 통해 초기 설정을 해주어야함.
git config --global user.email “이메일주소”
git config --global user.name “사용자이름”
git config --global core.editor vim #vim 으로 에디터 변경
git config --global color.ui auto
git 명령어 init
git init #.git 생성 (git 저장소는 .git 이다)
git clone 링크 #git clone을 통해 복사한 레포지토리는 독립적이고 완전함
git 명령어 stage & snapshot
git status #git 상태 확인
-> 현재 git server 보다 commit 한개가 앞서고 있다는 의미. 즉, commit 이 하나 더 있다는 의미이다.
git add 파일명 #stage 에 올리기
git add -f 파일명 #.gitignore 무시하고 staging
git commit 파일명 #커밋메시지 입력 위해서 에디터로 넘어감
git commit -m "메시지" #에디터로 안넘어가고 바로 커밋
git commit -a -m "메시지" #add와 commit을 한번에 해결
git reset 파일명 #git add한것 지우기 (unstage), 변경한 것은 유지
git reset --hard 해쉬값 #해당 해쉬값으로 커밋을 되돌리고 그 이후의 것은 삭제
git diff #working directory와 stage area간의 차이 출력
git diff --staged #stage area와 repository 간의 차이 출력
git 명령어 branch & merge
git branch #브랜치 나열
git branch 브랜치이름 #새로운 브랜치 생성
git checkout 브랜치이름 #브랜치 바꾸기
git merge 브랜치이름 #해당 브랜치를 현재 브랜치로 합치기
서로 다른 라인을 수정했을 경우에는 merge를 해도 충돌이 일어나지 않고, 자동으로 merge 된다.
git 명령어 inspect & compare
git log #현재 브랜치의 모든 커밋 history 출력
git log branchB..branchA #branchB에 없는 branchA의 내용 출력
git log --follow 파일이름 #해당파일에 대한 커밋 보여줌
git diff branchB..branchA #branchB에 없는 branchA의 변화 출력
git show 해쉬값: 해당 해쉬값에 대한 내용 상세히 보여줌
git 명령어 tracking path changes
git log #현재 브랜치의 모든 commit history 출력
git log branchB..branchA #branchB에 없는 branchA의 내용을 보여줌
git log --follow 파일명 #해당 파일에 대한 commit 보여줌
git diff branchB..branchA #branchB에 없는 branchA의 변화 출력
git show 해쉬값 #해당 해쉬값에 대한 내용 상세히 보여줌
git 명령어 tracking path changes
git rm 파일명
git mv 기존경로 새로운경로
git log --stat -M
git 명령어 share & update
git remote add 별명 깃주소 #해당 깃주소를 별명으로 git 연결
git fetch 별명 #원격 저장소에 변경사항이 있는지 확인
git merge 별명(또는 브랜치명) #현재 브랜치에 해당 브랜치를 합친다
git push (별명) (브랜치명) #현재 저장소를 해당 별명을 가진 원격저장소의 해당 브랜치에 업로드
git pull #원격저장소에서 변경사항 가져오기
#3 +++ : 3줄 추가되었다는 의미?
#빈 디렉토리는 오지 않는다? (0바이트는 안옴)
git push #config에 remote가 있어줘야 git push 가능 → git remote 해주기
git push (별명) (브랜치명) #현재 저장소를 해당 별명을 가진 원격저장소의 해당 브랜치에 업로드
git 명령어 rewrite history
git rebase 브랜치명 #merge 처럼 브랜치를 합치는 건데, 가지가 나눠져있지않고 아예 합쳐짐 (여러 branch에서 push 했다면 rebase할 수 없음)
git reset --hard 해쉬값(또는커밋번호) #특정 커밋으로 돌아가고 그 이후의 것은 모두 staging area에서 삭제
git 명령어 temporary commits
git stash #변경사항 staging해서 working directory에서 해당 변경 안보이도록함
git stash list #stash 목록 나열
git stash pop #stash 스택 맨 앞의 것으로 작업
git stash drop #stash 스택 맨 앞의 것 제거
'Coding > git & linux' 카테고리의 다른 글
[gdown] 리눅스에서 구글 드라이브 다운로드 (0) | 2024.01.08 |
---|---|
[Linux] file permission 리눅스 권한 변경하기 (chmod, chown) (0) | 2023.03.22 |
[Linux] 리눅스 명령어 총 정리 (--계속 업데이트--) (0) | 2023.03.20 |
[git] git clone할 때 하위 디렉토리만 가져오는 방법 (0) | 2023.01.19 |
[linux] 자주쓰는 tmux 명령어 정리 (0) | 2023.01.19 |