<프로젝트 폴더 만들고 저장소 만들기>
1. 파일 만들고 VSC에 Drag and Drop
2. 터미널을 열고 저장소 만들기
git init

<파일을 만들고 2개의 commit을 만들기(work 1, work 2)>
3. 파일 만들기 (꼭 저장하기)
work1.txt => 1
work2.txt => 2
work3.txt => 2
4. commit하기
git status
git add FILE_NAME
git commit -m "COMMIT MESSAGE"

<시간여행 하기>
5. 현재 상태 확인하기
git log --oneline --all
위의 코드를 통해 시간여행할 commit ID를 확인하기
6. Head를 옮겨서 Detached Head State로 바꿔주기
git checkout COMMIT_ID


7. 복귀해보자
git checkout master

<Branch를 이동하기>
HEAD가 가르키는 Branch인 master를 work 1으로 옮기고 싶다
(즉 work 2를 없애고 싶다)
8. work2를 지워보자
git reset --hard COMMIT_ID
attached state이면 HEAD의 변호사인 Master가 움직인다(HEAD가 따라감)
만약에 detached state였다면 HEAD가 직접 움직인다
<Attached State>

<Deteched State>

즉,
if(attached){
HEAD의 Branch가 움직임
}
else{
== checkout
}
reset은 원격저장소를 공유한 다음 내가 공유한 버전을 다른 사람이 가져가면 절대 사용하면 안된다
(이때는 revert를 사용해야한다)
<지정된 파일이 Commit되지 않게 하기>
9. config.txt 파일 만들기
10. ".gitignore" 파일을 만들기
11. .gitignore => config.txt적기



*.gitignore 파일도 add 하고 commit을 시켜줘야 한다(저장도 해야한다)

.gitignore 파일이 commit이 되었고 원격저장소에 올릴 때 같이 올라가기 때문에 다른 동료들도 공유를 한다
그러므로 .gitignore : 팀 전체의 정책(우리가 운영하는 저장소에서는 버전관리하면 안되는 파일이 무엇인가)
그러면 나만 commit 안하고 싶을 때는 어떤걸 사용해야하나
git -> info -> exclude : 나만의 개인 정책
(이 exclude내부에 나만 안하고 싶은 파일명을 적으면 된다)

또 다른 상황

이거는 어플리케이션 등을 만들때 같이 사용해야 하는데 이거를 팀 게시판 이런거에 올릴 수는 있지만
더 좋은 방법이 있지 않을까...
(팀만의 약속을 할 수 있다) => 우리는 형식이 지정된 파일을 정할 때 .template이라는 확장자를 붙이자
ex) 이런식으로

이후엔 add하고 commit

이러면 형식 파일은 commit이 되고 구체적인 내용인 config.txt파일은 숨길 수 있다
(이건 기능이 아니라 팀원들끼리의 암묵적인 약속)
(git형식이 아니라 그냥 우리가 정한거임)
<일반적으로 commit 안하는 파일 확인하는 사이트>
https://www.toptal.com/developers/gitignore
gitignore.io
Create useful .gitignore files for your project
www.toptal.com
대부분 ignore 시켜야하는 파일들이 비슷비슷해서 위의 사이트 이용하면 편하다
<같은 파일을 수정한 후 병합>
https://www.youtube.com/watch?v=wVUnsTsRQ3g


다음과 같은 상황을 연출해보자
12. common.txt를 다음과 같이 작성하고 저장

13. common.txt를 add하고 "start"라는 이름으로 commit

14. exp branch를 만들기
git checkout -b exp

15. common.txt의 2를 E2로 바꾸고 exp branch에서 E2라는 이름으로 commit (꼭 저장하기)

이미 common.txt는 과거에 add를 했었으므로 다음과 같이 한줄로 commit이 가능
git commit -am E2
16. 같은 방법으로 E4 작업



17. head를 branch에서 master로 옮기기
git checkout master

18. master에서 위의 방법과 같이 M3, M4로 수정하고 각각 commit

git commit -am M3

git commit -am M4
19. master에서 exp branch를 병합하기
위의 그래프를 보면 head가 master에 있으므로 바로 진행가능 (아니면 git checkout master)

master가 exp를 병합한다 :
실험이 끝나서 master가 exp를 가져오겠다
(딱 한번 작업)
exp가 master를 병합한다 :
어쩌피 master작업은 exp가 병합될 때 포함되어 있어야 하므로 작업을 미리미리 함 (update의 느낌)
(자주할 수록 좋음)
git checkout master
git merge exp


<3 way merge>

Base를 잡고 (위 예시에서는 A)
그 Base에서 바뀌었는가 안 바뀌었는가에 따라
바뀐 걸 따라가고
둘다 바뀌었으면 conflict
20. merge editor 누르면 다음과 같이 3자 대면 열림

결과를 보니 4에서 충돌이 났네 (심지어 base가 뭐였는지도 알려줌 ㄷㄷ)
만약 ME4를 바꾸고 싶으면 결과창에 직접 ME4적고 병합완료 클릭




21. merge한 버전을 commit 시켜주기

'IT Study > Git' 카테고리의 다른 글
| [Git] 서로 다른 로컬저장소에서 서로 다른 파일을 수정 (0) | 2022.10.24 |
|---|---|
| 2시간은 제발 이해하자 (0) | 2022.10.20 |
| [Git] Github를 통한 협업 방법 (0) | 2022.10.20 |
| [Git] Branch와 3 Way merge (0) | 2022.10.19 |
| [Git] Git의 기초 문법과 활용방법 (0) | 2022.10.11 |