현재 V2라는 폴더가 있다고 했을 때
<회원가입.txt in EX06 folder>
terminal에
$ git commit -m "회원가입"
<로그인.txt in EX06 folder>
$ git add .
$ git commit -m "로그인"
branch를 만들고 checkout하기
<Git Graph"> 에 들어가서
$ git checkout -b topic
이렇게 하면 branch를 만들면서 checkout을 한 번에 한다
<로그인.txt>를
"--------
로그인 버튼
--------"
으로 수정한다
그 다음 터미널에서
$ git commit add .
$ git commit -m "로그인버튼"
main으로 이동하기 위해
$ git checkout main
그러면 로그인.txt에 아무것도 없는 상태가 됨
이번에는 로그인.txt를
"---------
로그인 체크박스
------" 로 수정한다
$ git add.
$ git commit -m "로그인 체크박스"
그런다음 다시 graph를 봐보자


같은 파일을 두 명 이상의 사람이 변경을 할 경우, 변경사항의 순서나 선택을 Git은 스스로 하지 못한다. 이럴 때 충돌이 발생하고 사용자가 직접 충돌을 해결해줘야 한다
어떤 변경사항을 선택하고, 어떤 순서로 변경할 것인지 마음대로 바꿔도 괜찮을까? 절대 아니겠죠~
topic branch를 관리하는 개발자와, main branch를 하는 개발자와 소통을 통해 정해야한다
충돌 상황을 재현해보자
위의 상황에서
$ git merge topic을 해보면 충돌이 발생한다
그럼 충돌을 "fix"하고 "commit" 해야한다

5번을 찾아야 한다 (원래 ========가 있었음)
두 개 다 사용을 한다고 하면 다음과 같이 수정할 수 있다

$ git add .
$ git commit -m "충돌해결"
을 진행해주면 merge가 완료된다!
$ git checkout topic을 해보자
로그인.txt는 "로그인버튼"이라고 되어있고
$ git checkout main을 하면
"로그인체크박스 \n 로그인버튼" 이라고 되어있을 것이다
$ git log
$ git reset --soft a084를 하면
a084가 지워지고
$ git commit -m "로그인버튼"
을하면 수정이 된다
근데 reset을 하고 다시 commit을 해야 하니 복잡할 수 있다
이때 amend를 사용하면 더 편리하다!
$ git commit --amend -m "로그인버튼444"
을 하면 마지막 로그를 쉽게 변경할 수 있다
정리를 해보자면,,,,
1. Merge 충돌(3 way일때만)
topic3 -> f3의 내용을 30000원
topic4 -> f3의 내용을 33000원
-> topic3 먼저 merge하고 (main)
-> topic4 후에 merge하면 (충돌)
-> 해결 (commit명 충돌해결)
-> git commit --amend -m "충돌해결"
풀이
$ git commit -m "init"
$ git checkout main
해서 main으로 돌아오기
$ git checkout -b topic2
해당 브랜치 안에서는 그 브랜치 삭제 불가
$ git checkout topic1
$ git branch -D topic3
로 진행해야 한다
EX07 folder 생성
A.txt
$ git init
$ git add .
$ git commit -m "A"
$ git checkout -b topic
$ git commit -m "D"
E.txt 만들고
$ git add .
$ git commit -m "E"
main 으로 돌아가기
$ git checkout main
C.txt 만들고
$ git add .
$ git commit -m "C"
📍 1. 가지(branch) 선택 기준
어떤 로그를 뒤에 둘 것인가!
📍 2. 뒤에 둘 가지로 이동
rebase 하기
$ git checkout topic
$ git rebase main

A.txt 만들고
$ git init
$ git add .
$ git commit -m "A"
B.txt 만들고
$ git add.
$ git commit -m "B"
$ git checkout -b topic (topic만들면서 main에서 topic으로 이동)
E.txt 만들고
$ git add .
$ git commit -m "E"
$ git checkout main (main으로 이동)
C.txt 만들고
$ git add .
$ git commit -m "C"
D.txt 만들고
$ git add .
$ git commit -m "D"
topic로 이동
$ git checkout topic
$ git rebase main
$ git init
$ git remote add origin "url"
$ git pull origin main
협업 과정을 고려해보자
한 명이 topic1을 만들고, 다른 한 명이 topic2를 만든다고 생각해보자

가장 안전한 방법은 동기화를 먼저 하는 것이다!
왼쪽을 A, 오른쪽은 B라고 하면,
A는 다음 절차를 거쳐야 한다
1. main 다운 (pull)
2. topic1 -> rebase
3. topic1 -> push

이렇게 하면 Github에 topic1 stream이 생기고 init, 아이디중복체크가 올라온다
B는

EX11 folder 생성
$ git init
$ git add .
$ git commit -m "init"
github에서 repository 생성하기
url 복사
$ git remote and add origin "url"
$ git push origin main
$ git checkout -b topic1
$ git checkout -b topic2
그럼 Git Graph가 이렇게 된다

$ git checkout topic1
파일 회원가입.txt 생성하기
$ git add .
$ git commit -m "회원가입"
$ git checkout topic2
파일 글쓰기.txt 생성하기
$ git checkout -b topic1
$ git checkout -b topic2
이제 topic1에서 push 해보자
$ git checkout topic1
$ git checkout main
$ git pull origin main
$ git checkout topic1
$ git rebase main
$ git push origin topic1
topic1을 main에 합치고 싶다면 create pull request 버튼을 누른다 in Github
메시지를 적어 요청하면 된다! 그럼 main branch를 만든 팀장이 확인할 것이다
팀장은 요청이 들어오면
"merge pull request" 버튼이 있을텐데 3가지 옵션이 있다
동기화 : $ git pull origin main
$ git checkout topic2
$ git rebase main

RSA 공개키를 사용하면 A,B에서 공개키와 비밀키를 각각 만들어 쌍을 만든다
A공개키로 open하면 A비밀키로 close, vice versa가 가능해진다
비밀키를 사용하면 전자서명 역할을 하게 되고, 공개키를 사용하면 암호화 역할을 한다
프롬프트 창을 열어보자
$ ssh-keygen -t rsa -C "github url"
rsa): 저장경로작성 ex. c:\users\Desktop\gitprac
이러면 공개키와 비밀키가 생성되는데, 이 공개키를 github에 저장해놔야한다!
github > setting > SSH and GPG keys
로 들어가서 공개키를 복사해서 저장해주면 된다
공개키/비밀키가 생성된 폴더에 "config" 파일 생성한다
그 다음 다음과 같이 작성한다
Host github.com-codingspecialist
HostName github.com
User codingspecialist@naver.com
IdentityFile ~/.ssh/codingspecialist
Host github.com-본인 아이디
HostName github.com
User 유저네임작성
IdentityFile ~/.ssh/flutter-coder(레포지토리명)
Powershell을 실행한다
cd .ssh
ssh-add codingspecialist
ssh-add flutter-coder
github url (ssh) 복사
vscode로 들어가서
$ git remote add origin "url"인데
url이 git@github.com-@로 되어있다면 중간에 공개키/비밀키 설정했을 때 사용했던 아이디명을 작성해주면 된다


브랜치를 생성하고 rule을 설정할 수 있는데 "requrie approvals"를 1로 설정! 이건 한 명이 승인해야 merge가 된다는 말. 2로 하면 2명이 모두 승인을 해야하기 때문에 불편할 수 있다
브랜치 dev를 만든 후에 topic/write 브랜치를 생성했다면, topic/write에서 수정한 내용을 바로 push하면 안되고 dev에 있는 내용을 동기화를 먼저한다음 rebase dev를 한 후, topic/write를 push하면 된다
팀장은 github > pull requests를 눌러 commit > review change > Approve > submit merge를 하면 merge가 가능하다!
자세한 내용은 유튜브 강의에서 확인 가능하다
https://www.youtube.com/watch?v=PMm3_PTyVas&list=PL93mKxaRDidFtXtXrRtAAL2hpp9TH6AWF&index=36
(본 포스트는 정리가 되기 전으로 날 것의 notetaking입니다)