형상관리/Git

[Git] Git 원리 및 명령어 정리 중...

usingsystem 2023. 3. 13. 11:07
728x90
  • 기본 윈도우 명령어
    • pwd => 기본경로
    • cd => 폴더 이동
    • mk dir 폴더명 => 폴더생성
    • ls -al => 폴더 안에 파일 목록 출력
    • cat 파일명.확장자 => 해당 파일을 읽어온다.
pwd
cd Documents/
mk dir gitfth
ls al
ls -al
cat f1.txt
  • Git repository 생성
    • git init => 현재폴더에 git repository를 생성한다
git init
  • Git 유저등록
    • git config --global user.name
    • git config --global user.name 유저명
    • git config --global user.email 유저이메일
git config --global user.name
git config --global user.name ParkSangIn
git config --global user.email usingsystem@xxxxx.com
  • Git commit과 add
    • git status => git의 상태 출력
    • git add 파일명 => git에게 해당 파일을 추적하라고 알린다. 이때 stage의 area에 등록된다.
    • git commit => git에게 commit을 알리며 repository에 등록된다.(log관리 가능 상태)

버전을 변경했다면 바로 commit 하는 것 이 아니라 git add로 등록을 한 후 commit을 진행해야 한다.
(선택적으로 파일마다 commit을 할 수 있게 하기 위해서 git의 장점) add를 하면 stage area라는 곳으로 
올라가 commit 대기 상태가 된다.

  • Git commit 디테일
    • git commit --help => commit의 기능 설명 및 여러 기능을 참고할 수 있는 페이지로 이동
    • git commit -a => add를 하지 않고 commit을 할 수 있다.
    • git commit -am 버전명 => add를 하지 않고 commit을 할 수 있으며 버전명을 함께 작성하여 commit 한다.
    • git commit -m 버전명 => 버전명과 함께 작성만 add는 따로 해줘야 한다.
git stauts
git add f1.txt
git commit
  • Git Log 확인
    • git log => 커밋 로그확인
    • git log -p => 모든 버전 간 차이를 출력한다.
    • git diff 커밋아이디.. 커밋아이디 => 두 버전 간 차이점을 출력한다.
    • git dif => add 하기 전 이전 버전과의 차이점을 출력한다.
git log
git log -p
git diff  xxxxxxxxxxx..xxxxxxxxxxxx
git dif
  • Git commit 취소 방법
    • git reset 커밋아이디 --hard(soft)
    • git revert
git reset xxxxxxxxxxxx --hard
git revert

git reset

선택 버전 이후 버전은 git log를 하여도 더 이상 보이지 않지만 완전히 제거된 상태는 아니며
추 후 복구할 수 있다.
또한 버전 공유를 했던 버전을 reset 하면 안 되며 반드시 로컬에 있는 버전만을 reset 해야 한다.
--hard는 위험한 문법 중 하나이다.

 

git revert 
커밋을 삭제함과 동시에 새로운 버전을 생성한다.

 


 

Branch

commit과 commit 사이를 자유롭게 이동하는 부분으로 테스트 프로그램을 만들 때 유용하다. 메인프로그램에서 따로 작은 일부분의 프로젝트를 가지처럼 뻗어 관리하는 방법이다. 즉 메인 브런치와 테스트 브런치의 commit 내용을 다르게 가져갈 수 있어 더 이상 사용하지 않을 경우 테스트 브런치를 삭제하여도 메인 브런치에 영향을 주지 않는다.

  • git branch
    • git branch => git branch명령어를 입력할 경우 내가 생성한 모든 브런치 목록과 현재 브런치를 출력한다.
    • git branch 새로 생성할 브런치명 => 최초 메인브런치 이외에 다른 서브 브런치를 만든다.
    • git checkout 선택할 브런치명 => commit 하고자 할 브런치를 선택할 수 있다. 테스트 브런치를 생성하여 파일을 변경하여 commit 한 후 다시 메인 브런치에서 git log를 해보면 테스트 브런치에서 commit한 내용은 찾아볼 수 없다.
git branch
git branch exp
git checkout exp
  • git branch log 확인 방법
    • git log --branches --decorate => 테스트 브런치와 메인브런치를 출력한다
    • git log --branches --decorate --graph => 테스트 브런치와 메인브런치를 출력하며 그래프와 함께 출력된다.
    • git log --branches --decorate --graph --oneline => 좀 더 간략하게 그래프로 확인할 수 있다.
    • git log 브런치이름.. 비교브런치이름 => 첫 번째 브런치와 두 번째 브런치를 비교하여 첫 번째 브런치에 없는 commit내용을 보여준다.
    • git log -p 브런치이름.. 비교브런치이름 => 어떤 내용이 변경되었는지 함께 출력된다.
git log --branches --decorate
git log --branches --decorate --graph
git log --branches --decorate --graph --oneline
git log master..exp
git log -p mater..exp

그림 표시 설명 위에서 아래로 

git log --branches --decorate 출력 사진 

1. 현재 내가 선택한 브런치를 나타낸다 현재 브런치 master

2. exp브런치가 commit 했음을 의미한다.

3. master에서 commit했음을 의미한다.

 

git log --branches --decorate --graph 출력 사진

1. master에서 exp와 commit 내용이 다를 경우 다른 그래프로 표시된다.

2. master에서 exp에서 commit 한 부분이 출력됐다.

3. master와 exp의 파생 commit을 나타낸다

 

git log --branches --decorate --graph --oneline 출력사진

1. 간략해진 그래프

  • branch 병합 방법 Merge
    • git merge 병합할 브런치 명 => 현재브런치에서 병합하고자 하는 브런치 이름을 작성하면 병합된다.
git merge exp

 

  • branch 삭제
    • git branche -d 삭제할 브런치 명 => git checkout master 하여 master 브런치에서 삭제할 브런치 명을 작성하여 삭제한다.
git branche -d exp

 

 

branch 디테일 - 페스트포워드와 재귀

 

branch를 병합할 때 두 가지의 경우가 존재하며 아래는 병합 시 출력되는 내용이다.

요약 : fast forward는 새로운 커밋을 하지 않는다. 재귀는 새로운 커밋을 만든다.

Fast-forward
Merge made by the 'recursive' strategy.

https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging

 

Git - Basic Branching and Merging

If you need more advanced tools for resolving tricky merge conflicts, we cover more on merging in Advanced Merging.

git-scm.com


stash

테스트 브런치에서 작업을 하고 있는 도중 커밋을 할 상황이 아니고 메인 브런치에서 작업을 해야 하는 상황일 때 커밋을 하지 않고 메인브런치로 돌아간다면 메인브런치에 테스트 브런치에서 작업한 내용이 영향을 주게 된다. 이때 stash를 사용하여 테스트 브런치에서 작업한 내용을 숨김으로써 메인 브런치에 영향을 주지 않게 하는 방법이다. 

1. 테스트 브런치에서 stash로 작업내용을 숨긴다.

2. 메인브런치에서 해야 할 작업을 완료 후 commit을 한다.

3. 테스트 브런치에서 숨긴 작업을 활성화한다.

 

※stash특징 : 반드시 add 된 즉 git이 traking 하며 추적하고 있는 파일만 stash에 올라갈 수 있다.

  • git stash
    • git stash --help => stash사용하는 방법 페이지를 출력한다.
    • git stash => 현재까지 작업한 내용을 숨긴다.
    • git stash save => git stash와 동일하지만 save를 붙여 좀 더 명확하게 표현할 수 있다.
    • git stash apply => 숨긴 작업을 활성화한다. stash를 apply 하여 복원한 후 reset으로 작업을 지운다고 하여도 apply를 다시 하면 다시 작업이 생성된다. 즉 apply는 reset에 영향을 받지 않고 명시적으로 삭제해야 한다.
    • git stash list => stash에 저장한 작업 목록이 나타난다. staush 목록이 2개 이상일 때 apply를 진행하면 가장 먼저 들어온 작업만 등록된다. drop을 통해서 삭제해줘야 함.
    • git stash drop => apply 한 후 drop을 통해 작업한 내용을 삭제해 준다.
    • git stash apply; git stash drop; => apply와 drop을 한 번에 진행한다. 
    • git stash pop => git stash apply; git stash drop;명령어를 한번에 할 수 있다.
git stash --help
git stash
git stash save
git stash apply
git stash list
git stash drop
git stash apply; git stash drop;
git stash pop;

 

 

 

tag

릴리즈 관리용으로 사용된다.

 

 

728x90