[Git]Git Basic flow

길현민·2022년 8월 16일
0

Git&GitHub

목록 보기
5/8

깃을 사용하다보면 세세한 명령어도 중요하지만 기본적인 흐름이 중요하다는것을 느껴서 생각을 정리할겸 글을 써본다.
1차프로젝트는 기존에는 다른 브랜치의 작업물을 내 브랜치에 병합할때 머지라는 키워드를 사용했다.
예시:기본세팅에서 각자 브랜치에서 작업중 다른사람의 작업물이 Develop에 머지(Merge commit)가 될경우 => 메인 최신화(git pull origin master) => 내 브랜치에서 최신화를 위해 git merge Develop한다(프로젝트에서는 Develop이 아니라 main으로 그냥 작업함)

2차프로젝트는 병합할때 머지라는 키워드가 아닌 리베이스라는 키워드를 사용해서 병합한다

여러개의 커밋을 합칠수있는 squash

Git Merge VS Rebase(둘다 모두 병합)

다른 브랜치의 변화를 또 다른 브랜치로 병합을 하고자 할때 둘다 똑같이 사용을 하는데 완전히 다른 방식으로 작동을 한다
Rebase는 이름에서 유추할수 있듯이 베이스 자체를 바꾼다 머지커밋같은거가 남지 않게된다 최종적으로 작업된 그 시점으로 베이스가 이동
Rebase는 내 commit의 base를 변경하여,commit history를 일렬로 잘 정리해줍니다.
단점:Merge키워드를 사용할때는 마지막 commit하고 비교해서 딱한번만 conflict가 충돌 날 수가 있었지만 Rebase의 경우 아예 얘를 기반으로 새로운 commit을 만들어주는거다보니 Rebase를 진행한 상태에서 conflict가 발생하면 이 commit만든 개수만큼 conflict가 날수있다

[새로운 작업을 모두 마치고 push하기 전에는]

1.Main branch로 이동하여 remote main을 pull 받는다.
2.내가 push 할 Feature branch 로 이동한다.
3.'git rebase -i main'를 진행한다.

[Rebase하는 동안 squash 진행할 때에는]

1.가장 오래된 commit을 pick한다.
2.다른 커밋 메세지는 가장 오래된 commit을 기준으로 squash한다.
3.다른 커밋의 작업 내역이 없어지는 것이 아닙니다.
4.Esc -> :wq!로 창에서 빠져나온다.(!강제의명령어)

커밋메세지를 합쳐주는 창

1.불필요한 내용을 제거하고 현재 수정 내역에 대한 커밋 메세지를 작성
2.Esc -> :wq!로 창에서 빠져나온다.(!강제의명령어)
3.성공했다면 git log로 커밋 메세지 정리된것을 확인
4.git push
-rebase완료-

Rebase후 git push 하기

1.Rebase는 commit history를 정리하는 역할을 한다.
2.같은 브랜치에서 Rebase를 할 때마다 history가 달라질 수 있다.
3.수정 사항이 추가로 생긴 후 다시 rebase하면 history가 무조건 달라진다.
4.git은 history가 다른 branch의 push를 허용하지 않는다.
5.'git push origin feature/login -f' -f옵션을 사용하여 force push를 진행한다.

Rebase후 conflict 하기

해당하는 코드를 수정 후 Git add . (Git commit은 하지않는다 수정사항이 없으니까)Git rebase --continue를 진행한다
멈춰 있던 리베이스가 진행된다.충돌이 여러번나면 그 때마다 충돌을 해결하고 git add./git rebase --continue를 반복
계속 해결이 안된다면 git rebase --abort로 아예 rebase를 진행하기 전 상황으로 돌아갈 수도 있다.

내 브런치에서 3개 커밋을 푸쉬한뒤에 git checkout main => git add . => git commit -m "35 -> 36" => git push origin main(메인에서 푸쉬를했지만 상황은 다른 브랜치에서 작업한 작업물이 메인에 머지한것과 같은상황) => git checkout -(이전 브랜치로이동:내브런치) => 메인에 새로운 코드가 들어왔으니까 내 작업하던 브랜치에 최신화된 코드를 병합 해야한다(main로 가서 git pull로 최신화) => 1차의 경우 git merge main => git rebase -i main => 맨위 제일 오래된 커밋만을 pick하고 그외는 모두 s로 변경 => commit message:에서 수정한 한개만 남기고 모두 DD누르면 한줄을 한번에 지워준다

컨플릿 고의로 만들기
내브런치에서 고친뒤 git add . => git commit -m "conflict -> 충동" => git checkout main => git add . => git commit -m "느낌표 많이" => git push origin main 메인브랜치에서 git pull main => git checkout -
상황:충돌을 일으키기위해 각자 브랜치에서 수정한 상황이고 메인 같은 파일의 같은 라인의 위치를 수정한걸 또 git pull 한 상황
=> 내브런치에서 git rebase -i main => 맨위에 하나남기고 엔터 => conflict발생 => 수정뒤 => git add . => git rebase --continue => 여기 conflict에 해결한것에 대한 커밋메세지를 작성하는 부분이 나오는데 :wq로 나오면 쌓인 커밋 다시 재반복 => 반복되는 문제를 해결한뒤에 git add . => git rebase --continue하면 Successfully rebased and updated ~ => git log 하면 올바르게 conflict된거까지 확인할수가있다.

🐔참고문헌

backlog

https://backlog.com/git-tutorial/kr/stepup/stepup3_1.html

Wecode

profile
맛집탐방러

0개의 댓글