https://learngitbranching.js.org/?locale=ko
이 사이트에서 git에 대해 좀 더 이해할 수 있습니다. 설명도 잘 되있구요
git branch [브랜치명] : 하나의 커밋과 그 부모 커밋들을 포함하는 작업 내역
git checkout [브랜치명] : 브랜치로
merge : 두 개의 부모를 가리키는 커밋 생성 ( 부모들과 부모들의 부모들의 모든 작업 내역포함)
ex. git merge bugFix (master를 가리키고 있을 때 bugFix브랜치를 master브랜치와 합치기)
rebase : 기본적으로 커밋들을 모아서 복사한 뒤, 다른 곳에 떨궈 놓는 것. 리베이스를 하면 커밋들의 흐름 을 보기 좋게 한 줄로 만들 수 있다는 장점. 하위의 것을 rebase 하면 상위의 것도 같이 됨
단점 : rebase하면 커밋트리의 보이는 히스토리 수정
-i 옵션 : 인터렉티브 리베이스.
리베이스의 목적지가 되는 곳 아래에 복사될 커밋들을 보여주는 UI를 띄움(해시와 메시지도)
ex, git rebase master bugFix ( bugFix를 master 아래로 복사)
git log : 해시 확인(
HEAD : 현재 체크아웃된(=작업중인) 커밋 가리킴
HEAD 분리 : HEAD를 브랜치 대신 커밋에 붙이는 것
상대 참조를 이용하여 브랜치나 head에서 출발하여 다른 지점으로 이동 가능
(부모커밋을 체크아웃해서 head분리 먼저 해야함)
^ : 한 번에 한 커밋 위로 이동 (master^ : master의 부모, master^^ : master 조부모)
ex. git checkout master^
~<num> : 한번에 여러 커밋 위로 올라감
ex. git checkout HEAD~4
ex2. git checkout HEAD~; git checkout HEAD^2; git checkout HEAD~2
= git checkout HEAD~^2~2
-f 옵션 : 브랜치를 특정 커밋으로 옮기기
ex. git branch -f master HEAD~3 (=master 브랜치를 HEAD에서 3번 뒤로 옮기기)
reset : 브랜치로 하여금 예전의 커밋을 가리키도록 이동시키는 방식으로 변경 내용을 되돌린다.(애초에 커밋하지 않은 것 처럼)
ex.git reset HEAD~1
revert : 내용을 되돌리고 되돌린 내용을 다른 사람들과 공유하기 위해서 사용
(되돌리려(없애려) 한 커밋아래에 새로운 커밋 생김)
ex. git revert HEAD
checrry-pick : 현재 위치(HEAD) 아래에 있는 일련의 커밋들에대한 복사본을 만들겠다는 것
- git cherry-pick <Commit1> <Commit2> <...>
- ex. git cherry-pick c2 c4 (현재 작업중인 것 아래에 c2, c4 복사)
불필요한 코드를 포함하지 않고 브랜치를 master에 합치려면?
- git rebase -i
- git cherry-pick
milestone : 커밋을 표시할 브랜치보다 영구적인 git 태그 방법
- ex. git tag v1 c1 ( v1이 태그이름 c1은 커밋이름)
describe : 태그를 기준 상대적인 위치 묘사해주는 명령어 git describe <ref>
- git describe <ref>
- <tag>_<numCommits>_g<hash>
- tag : 가장 가까운 부모태그, numCommits : 그 태그가 몇 커밋 멀리있는지, hash : 묘사하고 있는 커밋의 해시
bisect : 문제가 되는 커밋을 찾는 명령어
* clone : 원격저장소의 복사본을 local에 생성
* 원격 브랜치를 보통 origin/master 로 표현 ( remotename / branchname)
- 원격 브랜치는 가장 최근 원격 저장소와 작업했을 때를 기준으로 원격 저장소의 상태를 반영하기만 함
* fetch : 원격저장소에 있지만 로컬에 없는 커밋을 다운로드하고 원격브랜치가 가리키는 곳을 업데이트
로컬의 상태는 전혀 변하지 않음!!!
* pull : fetch로 로컬에 데이터를 내려받은 후 작업을 업데이트하여 변경 반영
- = git fetch; git merge o/master
* fakeTeamwork : 원격 마스터에 하나의 커밋을 하는 것
- ex. git fakeTeamwork
- ex2. git fake Teamwork foo 3 : 원격저장소의 foo브랜치에 3개의 커밋 push
* push : 원격저장소에 업로드하고 새 커밋을 합치고 갱신하게 함
- git push <remote><place>
- git push origin <source>:<destination>
* 히스토리가 엇갈려 push가 안될 때
- git fetch; git rebase o/master; git push
- = git fetch; git merge o/master; git push
- = git pull --rebase; git push
* 원격저장소의 master는 보통 잠겨있음
로컬의 master에서 커밋 후 push하면 오류 -> pull request
* null을 push하면 그 장소의 브랜치가 삭제됨
ex. git push origin :foo
* nothing을 fetch하면 새 브랜치 생성
ex. git fetch origin :bar
답↓
[메인]
<git 기본>
1. git 커밋 소개
git commit
git commit
2.git에서 브랜치쓰기
git branch bugFix
git checkout bugFix
3.git에서 브랜치 합치기
git branch bugFix
git checkout bugFix
git commit
git checkout master
git commit
git merge bugFix
4. 리베이스의 기본
git branch bugFix
git checkout bugFix
git commit
git checkout master
git commit
git checkout bugFix
git rebase master
<다음 단계로>
1. HEAD 분리하기
git checkout c4
2. 상대참조 ^
git checkout bugFix^
3. 상대참조 #2(~)
git branch -f master c6 (master를 c6로 옮기기)
git checkout c1 ( HEAD를 c1으로 옮기기)
git branch -f bugFix HEAD~1 (bugFix를 c0로 옮기기)
4. 작업 되돌리기
git reset HEAD~1
git checkout pushed (pushed 가리키기)
git revert HEAD(pushed 브랜치 revert)
<코드 여기저기로 옮겨다니기>
1. cherry-pick 소개
git cherry-pick c3 c4 c7(현재 작업중인 master* 아래에 c3 c4 c7 복사)
2. git 인터렉티브 리베이스
git rebase -i HEAD~4 (창이 뜨면 위치 조정, 삭제하고싶은거 삭제하고 rebase)
<종합선물세트>
1. 딱 한개의 커밋만 가져오기
git checkout master
git cherry-pick c4
2.커밋들 갖고 놀기
git rebase -i HEAD~2
git commit --amend (바로 top에 있는 커밋 내용 정정할 때 사용)
git rebase -i HEAD~2
git branch -f master c3''
3.커밋 갖고 놀기 #2
git checkout c1
git cherry-pick c2
git checkout mastser (커밋 이름으로 해도되고 브랜치이름으로 해도됨)
git cherry-pick c2 c3
4.git 태그
git tag v0 c1 (c1 커밋에 v0이라는 태그 붙이기)
git tag v1 c2
git checkout v1 ( 태그 이름으로도 체크아웃 가능)
5.git describe
git commit
<고급문제>
1.9천번이 넘는 리베이스
git rebase master bugFix
git rebase bugFix side
git rebase side another
git rebase another master
2.다수의 부모
git branch -f bugWork HEAD~^2~
3. 브랜치 스파게티
git checkout one
git cherry-pick c4 c3 c2 (git rebase -i one master 와 같음. cherr-pick에서 순서를 바꾸거나 없앨수도 있다)
git checkout two
git cherry-pick c5 c4 c3 c2
git branch -f three c2
[원격]
<push&pull -- GIT 원격 저장소>
1. Clone 소개
git clone
2. 원격 브랜치
git commit
git checkout o/master (원격브랜치로 checkout 한 상태에서는)
git commit ( 커밋을해도 head만 넘어간다)
3. git Fetch
git fetch
4. git pull
git pull
5. 가짜 팀워크
git clone
git fakeTeamwork master 2
git commit
git pull
6. git push
git commit
git commit
git push
7. 엇갈린 히스토리
git clone
git fakeTeamwork master(원격 c0-c1-c2)
git commit (로컬 c0-c1-c3)
git pull --rebase ( 원격의 c2 로컬로 rebase해서 pull)
git push (원격에 반영)
8. 잠겨버린 master (?)
git reset --hard o/master
git checkout -b feature c2
git push (origin feature)
<고급 git 원격 저장소>
1. push master
git fetch (원격에 있는거 가져오기)
git rebase o/master side1
git rebase side1 side2
git rebase side2 side3
git rebase side3 master
git push
2. 원격 작업과 merge하기
git checkout master
git pull
git merge side1
git merge side2
git merge side3
git push
3. 원격저장소 추적하기
git checkout -b side o/master (side브랜치가 o/master 추적하도록)
git commit
git pull --rebase
git push
4.git push의 인자들
git push origin foo
git push origin master
5. git push 인자 --확장판
6. Fetch의 인자들
git fetch origin master^:foo
git fetch origin foo:master
git checkout foo
git merge master
7. Source가 없다
git push origin :foo (origin원격 저장소의 foo에 null에 있는 값 push)(없으니까 foo 사라짐)
git fetch origin :bar (origin원격 저장소nothing에서 bar로 push)(bar생성)
8. pull 인자들
git pull origin bar:foo
git pull origin master:side
'공부 > 기타' 카테고리의 다른 글
[docker]도커 에러 docker : error during connect (0) | 2022.08.01 |
---|---|
한글이 이상하게 쳐질 때 간단한 해결 방법 (2) | 2022.07.28 |
[지라Jira]Import Issues from CSV 방법(형식) (0) | 2022.07.24 |
[노션] 빨간 밑줄 없애기(윈도우 10) + 더불어 크롬 맞춤법 끄기 (+노션 업데이트 후 추가) (0) | 2022.04.20 |
PDF파일 PPT로 변환하는 법(혹은 JPG, WORD 등)/기타 파일 변환/개수 제한 없는 파일 변환 사이트 추천 (0) | 2021.09.14 |
댓글