-
[git] git clone, rebase개념, pull, pushet al/Docker&git 2023. 12. 5. 21:04
(추후 정리 예정)
head
head를 detach하게 되면 아래와 같아진다.
paremt는 head가 가리키는 노드가 부모가 된다.
head가 가리키게 된다.
exp branch를 만들면 다음과 같다.
만약 main을 그대로 둔 채로 commit하면 main이 움직이게 되므로 실험적인 가지의 의미가 퇴색된다.
checkout은 head를 바꾸고, reset은 branch를 바꾼다.
git reset --hard 커밋id
커밋 메세지 변경이 가능하다.
git commit --amend -m vv2
커밋 id가 변경된다.
기존 c는 삭제된 효과가 있다.
merge시.
exp의 변화를 main에 주고자 할 때. main을 가리키는 상황에서 ,exp를 병합.
exp에 마우스를 대고 병합한 건 branch 이름으로 만들어지고 exp의 메세지에서 병합한 건 커밋 id로 메세지가 작성된다.
병합시 커밋메세지 바꾸지 않는 게 국룰
3-way-merge 활용은
rebase, revert, cherry-pick
merge가 너무 많으면 merge hell !!
rebase의 일부 기능 : 실제로 병렬로 작성했으나 거짓말로 직렬로 작성된 것처럼 하는 것. -> 타임라인별로 보기 편하게 하고 싶을 때.
* rebase
main을 exp로 rebase해
이건 잘못한 경우이다.
아래처럼 바꾸는 게 원래 의도대로 바꾼 것이다.
(아래 가지 두개는 삭제 효과)
rebase는 merge 이후에 적용하는 것이 아니라 merge와 다른 결로 병합하는 방법임.
무엇이 base가 되는 것인지 잘 생각해야한다.(base는 계속 바뀜)
* cherry-pick
특정 버전의 변화만 가져오고 싶을 때 사용.(우리의 구현체에서 특정 커밋 하나만 병합하고 싶을 때 사용)
3-way merge를 할 때 항아리가 base이고, 풍선이 변화이다.
우는 아이에게서 버전을 만든다.
* 깃허브 연동
or create는 저장소부터 만드는 거
or push는 저장소가 있을 때 만드는 거
로컬과 클라우드(깃허브)를 연결할 때 로컬에 깃허브 주소를 넘겨줘야한다.
깃허브 주소는 외우기 힘드므로 origin으로 이름을 설정해서 넣어줌.
이름을 설정하는 이유는 여러 주소를 연결할 수 있기 때문이다.
remote repository에 push해야 한다.
잘 연결 됐고 push하면
git log 시 (HEAD -> master, origin/master)가 붙는다.
origin/main은 remote tracking branch이다. git이 알아서 관리하는 애로, 로컬의 마지막 push상황을 기록해놓는다.
이미 push한 건 수정하면 안 된다!!
git log는 head를 start pointing으로 찾는다.
git log --all 해야 다 보인다.
git log --all --oneline
git log --all --oneline --graph
git log --all # 모든 로그가 다 보인다. git log --all --oneline # 한줄로 요약해서 보여준다. git log --all --oneline --graph # 그래프로 보여준다.
push 전에 위와 같이 로컬에 B를 만든다.
push를 하면 위 사진처럼 된다.
* clone
source control에서 clone repository를 누르고 폴더를 정해준다.
clone = init + remote add REPO_URL + pull
할 때마다 지역 저장소가 생기는 거다.
원격저장소의 헤드가 L3가 되었다. 쓸모 없는 정보이다.
* pull $ sync changes
pull로 변경 사항을 다운 받고
push로 github에 올릴 수 있다.
sync changes = pull + push
* conflict는 내용과 연관된것이고, push pull 할 때 message가 겹친다고 문제생기지 않는다.
* 서로 다른 로컬 레포지토리에서 변경사항이 있을 경우 어떻게 진행될까?
왼쪽만 push하면 위 그림과 같다.
이 상황에서 오른쪽 사람이 push하려고 하면 rejected 된다.
그래서 오른쪽 사람은 L4를 로컬로 가지고
pull = fetch + merge
fetch는 원격 저장소의
오른쪽 사람이 fatch를 하면 원 저장소에 있는 L5를 가져온다. -> fetch는 절대로 conflict가 날 수 없다.
이후 merge를 하면 위아래와 같이 된다.
* github에서 공동 레포지토리를 생성하는 방법
'et al > Docker&git' 카테고리의 다른 글
[Docker] Dockerfile 작성 및 이미지로 build 하는 법 (0) 2024.01.12 [tmux] 설치 및 명령어 정리, 마우스 휠 사용하기 (0) 2023.12.19 [git] 기본 명령어 정리 (1) 2023.11.29 [git] vscode로 git commit 하는 법 (2) 2023.11.28 [Docker] pytorch 딥러닝 환경 구축하기 (0) 2023.10.22