본문 바로가기
IT Study/Git

[Git] 이고잉 강사님 특강 (1~2) 복습 & 정리

by 하람 Haram 2022. 10. 20.
728x90

<프로젝트 폴더 만들고 저장소 만들기>

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

 

detached state는 별로 좋은 상태가 아니여서 다음과 같이 잔소리가 많아짐

 

Head가 옮겨진것을 확인할 수 있다

 

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>

master를 옮겨서 work 2를 없애고 head가 따라오는 것을 볼 수 있다

 

<Deteched State>

HEAD가 직접 움직이고 master는 그대로 있는 것을 볼 수 있다

 

즉,

 

if(attached){

        HEAD의 Branch가 움직임

}

else{

        == checkout

}

 

reset은 원격저장소를 공유한 다음 내가 공유한 버전을 다른 사람이 가져가면 절대 사용하면 안된다

(이때는 revert를 사용해야한다)

 

<지정된 파일이 Commit되지 않게 하기>

9. config.txt 파일 만들기

 

10. ".gitignore" 파일을 만들기

 

11. .gitignore  => config.txt적기

 

처음 상태 (조심하면 되지만 실수할 수도 있자나)

 

.gitignore 파일을 만든다음 config.txt 입력 후 저장

 

status를 해보면 .gitignore는 있는데 config.txt는 없어졌다

 

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

 

ㅠㅠ config 오타남 근데 크게 상관없으니 패스

 

.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적고 병합완료 클릭

 

 

잘 바뀐 모습을 볼 수 있다

 

파일이 바꼈으니깐 commit 해줘야 겠죠??

 

커밋 버튼을 누르면 끝 (아니면 터미널에 하던가)

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

 

merge된 새로운 버전이 만들어진 모습

728x90