Networks/Git

SK networks AI Camp - git bash를 통한 실습

코딩하는 Español되기 2024. 7. 27. 09:00

git & 버전관리 링크

2024.07.26 - [컴퓨터 공학/Networks] - SK networks AI Camp - 버전관리 시스템&Git

 

git 파일 생성, 삭제, 복구 실습

1. c드라이브에 dev 폴더에 git_tutorial 폴더 생성

2. git bash 실행

3. 파일로 이동

cd /c/dev/git_tutorial

4. 샘플 폴더 생성(폴더 생성 : mkdir)

mkdir sample

5. 생성되었는지 확인 (ls)

ls

6. 해당 디렉터리로 이동(sample로)

cd sample

7. red, orange 파일 생성 (touch 파일명)

touch red orange

8. 빨강이라는 글자를 red 파일에 업로드 (echo "내용" >> 파일명)

echo "빨강" >> red

9. 주황이라는 글자를 orange 파일에 추가

echo "주황" >> orange

10. red 파일에 들어간 글자 확인 (cat 파일명)

cat red

11. 로컬 Repository 생성 (git init)

git init

12. .git 파일 생성된 것을 확인 (.으로 시작하는 파일은 숨김파일)

ls -a

13. 상태확인 (git status)

git status

14. add (git add -A)

*warning이 뜨는데 무시해도 괜찮

git add -A

15. 다시 상태를 확인 (처음과 달리 변경됨)

git status

16. commit 하기 (git commit -m "내용 입력")

* -m : 메시지 입력

git commit -m "v1 commit"

17. 확인 및 로그 확인

* 누가, 언제, 무엇을 했는지 확인 가능

git status
git log

19. 이번에는 yellow 파일 생성 + 파일에 "노랑"이라고 입력 및 확인

20. git add -A와 commit 하기

: 해당 코드 입력 후 두 개의 commit이 발생한 것

how to check? git log

commit은 변경 내용을 업데이트한다고 생각해야 함

git add -A
git commit -m "v2 commit"

21. 삭제하기

working Repository, staging Rpository, commit 상태 중 local(working directory)가 변경된 것!!

rm red

22. 파일 수정

"주황" 이 있던 orange에 "오렌지"라는 내용을 넣어보기 

출력 결과 주황 \n 오렌지라고 나옴

즉, >> 는 list에 append 같은 느낌

echo "오렌지" >> orange
cat orange

23. 파일 저장

git add -A : staging 상태로 변경된 것

git commit -m "v3 commit" : staging 상태에 변경 사항을 로컬에 변경

그래서 red 파일이 삭제된 것과 orange의 변경 사항이 commit 된 것

 

git add -A
git commit -m "v3 commit"

그렇다면 지금까지 몇 개의 commit이 발생한 것일까? (총 3개의 commit 이 발생한 것)

[git log로 확인 결과]

 

24. 해당 commit 시점(v2로)으로 변경하기 (과거이력제거; git reset)

식별자가 있어야 함 확인을 위해 git log를 통해 확인을 해서 노란색 commit 옆에 있는 숫자가 식별자

v2에 식별자를 선택하고 왼쪽 마우스 클릭한 후(무조건 한 번만!) $ 옆에 오른쪽 마우스를 눌러서 붙여 넣기

(git reset 식별자 코드 --hard)

git reset 4d9549e1858bf6271ca28ac1de166be9f66efba2 --hard

이후 ls를 하면 v3에서 삭제했던 red가 다시 생성

                                     "오렌지"를 추가했던 orange가 "주황"으로 바뀜

또한 과거이력(v3)이 삭제됨

그래서 버전이 사라지면 안 되는 경우 reset을 쓰면 안 됨
그렇다면 과거 이력을 유지하면서 돌아가는 것은?
git revert

25. 과거 이력 유지한 상태로 돌아가기 (git revert)

    - 돌아가기 전에 파일 수정을 한번 해주기(확인하기 좋게 하기 위해) (echo "내용" >> 파일명)

    - 반영(git add -A)

    - v3가 없어졌으니 commit을 v3로 해주기 (git commit -m "메시지")

echo "오렌지" >> orange
git add -A
git commit -m "v3 commit"

    - v2로 돌아가기 위해 식별자 복사 (git log)

    - v3를 유지하면서 v2로 이동 (git revert --no-commit 식별자)

git log
git revert --no-commit 4d9549e1858bf6271ca28ac1de166be9f66efba2

    - 이후 commit을 하면 그 결과 commit이 4개가 됨. 이력을 유지하면서 추가가 됨  (아래 사진의 revert가 v4)

git commit -m "v4 commit"


branch 실습

 

1. 브랜치 생성과 브랜치 이동 (git switch -c 브랜치명)

  ○ 아래 코드 결과 파란색(master → add-color)이 변경됨 (= 브랜치가 master에서 add-color로 이동됨) 

git switch -c add-color

이걸 따로 쓰면 아래와 같이 돼요. 새로운 add-branch를 새로 생성해 볼게요.

git branch add add-branch
git switch add-branch

2. 파일 추가 및 파일 내용 입력

add-color에서 작업을 진행하기 위해 다시 바꿔줄게요. (git switch)

저는 ls 결과 orange와 red가 나왔습니다.

green과 blue 파일을 추가해 줄게요 (touch green blue)

또 green 파일에는 "green"과 blue 파일에는 "blue"를 추가해줄게요 (echo "내용" >> 파일명)

git switch add-color
ls
touch green blue
echo "green" >> green
echo "blue" >> blue

3. commit 해주기

git add -A + git commit -m "메시지"

* 메시지는 변경점이 무엇인지 확인하기 쉽게 적어주는 것이 좋아요.

git add -A
git commit -m "add green, blue"

4. commit 상태 확인 (git log)

로그 결과 총 5개가 나왔어요. 

5. 파일 확인 (ls)

파일 확인 결과 blue, green, orange, red가 있어요.

그러면 master로 이동하여 파일을 보면 add-color branch와 상태가 같을까요? 다릅니다.

ls를 찍어보니 두 개가 나오고 파일탐색기로 들어가도 2개가 나와요.

6. 다시 브랜치 스위치

다시 브랜치를 add-color로 바꿔주고 ls를 찍고, 파일탐색기에서 경로로 들어가서 보면 4개가 나옵니다.

7. 다시 마스터로 이동 후 update-red 브랜치 생성 후 red 파일 수정하기(+commit)

git switch master
git switch -c update-red
echo "red11" >> red
git add -A
git commit -m "update red"

8. 현재 브랜치 상황

  ○ master 브랜치 : red, orange 파일 존재

  ○ add-color 브랜치 : red, orange, green, blue 파일 존재

  ○ update-red 브랜치 : red(변경되어 있는 상태), orange

# master에서 update-red로 이동
ls # orange, red
cat red # 빨강\n red11

# update-red에서 master로 이동
git switch master
ls # orange, red
cat red # 빨강

# master에서 add-color로 이동
git switch add-color
ls # blue green orange red
cat red # 빨강

9. merge

merge 하기 전 master로 이동해 주세요 (git switch master)

merge를 하면 master에 없는 add-color 추가된 내용이 합쳐져요(파일 2개 : blue, green)

git switch master
git merge add-color

이렇게 되면 없던 커밋 내용이 추가가 돼요. (add green, blue)

10. 충돌 상황

  ○ master 브랜치 : red, orange, green, blue 파일 존재

  ○ add-color 브랜치 : red, orange, green, blue 파일 존재

  ○ update-red 브랜치 : red(변경되어 있는 상태), orange

master에서 red 파일을 수정하여 변경사항을 저장해 볼게요.

그렇게 되면 master와 update-red 브랜치의 red 파일이 수정되어 있는 상태입니다.

하지만 master와 update-red의 똑같은 파일(red)의 내용이 다른 상태입니다.

그래서merge 하면 red에서 충돌이 발생하였다는 에러 메시지가 나와요.

echo "reeeeeed" >> red
git add -A
git commit -m "update reeeed"
git merge update-red #충돌상황

11. 오류 해결

red에 어디에서 문제가 발생했는지 확인하기 위해 cat red라고 쳐주면 어디 부분이 오류가 났는지 확인이 돼요.

==== 구분자를 통해서 >>>update-red(충돌난 파일)의 red11이라는 내용과 reeeeeeeed(master)라는 내용이 충돌한 것을 알려줍니다.

그러면 수정을 위한 방법을 알아볼게요.

code 파일명을 입력하면 VSCode로 red 파일이 열리게 돼요. (만약 안된다면 직접 키셔야 해요 ㅠㅠ)

code red

1번째 버튼을 누르면 reeeeeeed를 살리는 것

2번째 버튼red11을 살리고

3번째둘 다 살리는 버튼입니다.

둘 다 살려보겠습니다. (그냥 코드를 지워서 해도 됩니다) 저장하고 창을 닫아주세요.

그리고 cat red로 파일 내용을 확인해 주고 저장해 줄게요. 그러면 master|Merging에서 master로 브랜치가 변경돼요.

cat red
git add -A
git merge -m "merging red"

그렇게 하고 git log를 찍어주면 아래와 같이 나옵니다.