✅ Git
✅ GitHub
✅ Git vs GitHub

✅ 협업 시 주의사항
ls 명령어 옵션 / 결합하여 사용가능
-- -a : 숨김 파일과 디렉터리를 함께 표시
-- -l : 파일이나 디렉터리의 상세 정보를 함께 표시
-- -r : 파일의 정렬 순서를 거꾸로 표시
-- -t : 파일 작성 시간 순으로(내림차순) 표시
-- clear : 화면 지우기
디렉터리 이동 : cd 이동할 디렉터리 경로
cf. 디렉터리 = 폴더이다.
-- cd .. : 현재 위치에서 상위 디렉터리로 이동
-- cd ~ : 홈디렉터리로 이동
-- cd 하위디렉터리이름 : 현재 위치에서 하위 디렉터리로
디렉터리 생성 : mkdir 생성할 디렉터리 이름
-- ex) mkdir test : "test"라는 디렉터리를 만듬
디렉터리 삭제 : rm -r 삭제할 디렉터리 이름
-- ex) rm -r test : "test"라는 디렉터리를 삭제
현재 디렉터리에 test.txt 파일 생성 : vim test.txt
-- 위의 코드같은 경우에는 해당 파일이 없으면 생성
-- 파일이 있으면 파일을 열어줌.
입력모드와 ex모드
-- ex 모드 → A or I 누름 → 입력모드
-- 입력모드 → ESC 누름 → ex 모드
내용 저장하기
-- :을 입력하면 "INSERT"가 있던자리에 텍스트 입력 가능
-- :wq 입력 후, Enter
ex 모드 명령어
-- :w or :write : 편집 중이던 문서를 저장
-- :q or :quit : 편집기를 종료
-- :wq : 편집중이던 문서를 저장하고 종료
-- :q! : 문서를 저장하지 않고 편집기를 종료
위에 만든 .txt 문서 내용 확인하기
-- cat 파일이름
-- ex) cat test.txt
hello-git 디렉터리 생성 후 이동
$ mkdir hello-git # hello-git 디렉터리 생성
$ cd hello-git # 이동
git init : git 초기화하기
ls -al : 디렉터리 내부 확인
$ ls -al
total 35
drwxr-xr-x 1 sjsj4 197609 0 May 22 14:22 ./
drwxr-xr-x 1 sjsj4 197609 0 May 22 16:42 ../
drwxr-xr-x 1 sjsj4 197609 0 May 22 14:19 .git/
-rw-r--r-- 1 sjsj4 197609 16 May 22 11:37 .gitignore
-rw-r--r-- 1 sjsj4 197609 13 May 22 14:19 bye.txt
-rw-r--r-- 1 sjsj4 197609 13 May 22 11:29 coding.txt
-rw-r--r-- 1 sjsj4 197609 1501 May 22 14:22 dfa
-rw-r--r-- 1 sjsj4 197609 79 May 22 11:22 hello.txt
-rw-r--r-- 1 sjsj4 197609 7 May 22 11:32 log.log
-rw-r--r-- 1 sjsj4 197609 10 May 22 11:32 style.css
-rw-r--r-- 1 sjsj4 197609 3 May 22 14:19 test.txt
작업트리(working tree) = 작업디렉터리(working directory)
-- 파일 수정, 저장 등의 작업을 하는 디렉터리
-- 우린 눈에 보이는 디렉터리
스테이지(stage)
-- 버전으로 만들 파일이 대기하는 곳
-- 눈에 보이지 않음
저장소(repisitory)
-- 스테이지에서 대기하던 파일을 버전으로 만들어 저장하는 장소
-- 눈에 보이지 않음
버전생성과정
-- 1. 작업 트리에서 파일을 수정하고 저장
-- 2. git으로 버전 관리를 하기 위해 "add" 명령 실행하여 스테이지에 등록 (작업트리 → 스테이지)
-- 3. 버전을 만들기 위해 "commit" 명령 실행(스테이지 → 저장소)
-- 4. 스테이지에 있던 파일을 저장소에 저장(스테이지의 파일은 없어짐) / ver.v1 생성
-- 추가 버전을 만들기 위해서는 위의 과정을 반복
-- 5. 작업 트리에서 파일을 수정하고 저장
-- 6. git으로 버전 관리를 하기 위해 "add" 명령 실행하여 스테이지에 등록 (작업트리 → 스테이지)
-- 7. 버전을 만들기 위해 "commit" 명령 실행(스테이지 → 저장소)
-- 8. 스테이지에 있던 파일을 저장소에 저장(스테이지의 파일은 없어짐) / ver.v2 생성
작업트리에서 빔으로 문서 수정하기
-- 아래는 ver1 생성 관련 코드이다
-- git status 입력하면 아래의 코드가 나올 것이다.
On branch master # 현재 master 브랜치에 있음
No commits yet # 현재 커밋한 파일이 없음
nothing to commit (create/copy files and use "git add" to track) # 현재 커밋할 파일이 없음
-- vim hello.txt를 통해 txt파일을 만든 후 git status 확인하면 아래와 같이 나온다.
On branch master #현재 master 브랜치에 있음
No commits yet # 한번도 커밋을 하지 않았음(커밋 이력이 없다)
Untracked files:
(use "git add <file>..." to include in what will be committed)
hello.txt # hello.txt 파일이 현재 git이 추적하지 않는 상태이다.
nothing added to commit but untracked files present (use "git add" to track) # 커밋할 내용은 없지만, 추적되지 않은 파일이 있음
-- git add hello.text : "hello.txt" 파일을 스테이지에 추가
$ git add hello.txt
warning: in the working copy of 'hello.txt', LF will be replaced by CRLF the next time Git touches it
-- git status : 다시 git의 상태를 확인
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: hello.txt # 스테이지에 new file인 "hello.txt"가 추가됐음
-- git commit -m "커밋메세지" : 커밋을 실행
--- ex) git commit -m "message1"
$ git commit -m "message1"
[master (root-commit) b9f665e] message1
1 file changed, 3 insertions(+) # 추가됐음을 확인
create mode 100644 hello.txt
-- git status : 다시 git의 상태를 확인
$ git status
On branch master
nothing to commit, working tree clean
-- git log : 커밋한 버전 확인하기
Author: Sungjae <sjsj4123@gmail.com> #처음에 설정한 이름과 아이디
Date: Thu May 22 11:08:21 2025 +0900 # 날짜
message1 # 아까 입력한 커밋메세지
-- 아래는 ver2 생성 관련 코드이다.
-- vim hello.txt : "hello.txt" 파일을 수정
-- git status : git의 상태 확인
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: hello.txt
no changes added to commit (use "git add" and/or "git commit -a")
-- git commit -am "커밋메시지" : 한번 이상 커밋한 파일을 다시 커밋할 때만 사용 가능
--- ex) git commit -am "message2"
-- git log : git의 로그 확인
commit 3a456ae1a5f9371571169ee987d32593f88fb223 (HEAD -> master) # HEAD는 최신버전 이라는 뜻이다.
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 11:16:44 2025 +0900
message2 # message2를 통해 정상적으로 커밋이 됐음을 확인
commit b9f665e8a4670e2bbe884a4cf9df50b01f50c04c
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 11:08:21 2025 +0900
message1
vim hello.text : hello.txt 파일 수정하기
git status : git의 상태 확인
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: hello.txt
no changes added to commit (use "git add" and/or "git commit -a")
git diff : 변경 사항 확인하기
$ git diff
warning: in the working copy of 'hello.txt', LF will be replaced by CRLF the next time Git touches it
diff --git a/hello.txt b/hello.txt
index abb7273..3175f4b 100644
--- a/hello.txt
+++ b/hello.txt
@@ -1,4 +1,3 @@
안녕하세요!
김성재입니다.
-피곤합니다. # 빨간색 : 삭제한 내용, 초록색 : 추가된 내용
-버전 2를 만들기 위해 내용을 추가합니다.
+지금 git 수업을 듣고 있습니다.
어떤 파일을 제외할까?
-- 보안 상 위험성이 있는 파일
-- 프로젝트와 관련 없는 파일
-- 용량이 너무 커서 제외해야 하는 파일
.gitignore 파일
-- git에서 관리할 필요가 없는 파일 또는 디렉터리를 작성
-- 작성한 파일 또는 디렉터리는 git add 실행 시, 스테이징 안됨
.gitignore 파일 작성 방법
-- 특정 파일 제외 : style.scc
-- 현재 경로에 있는 특정 파일만 제외 : /style.css
-- 특정 디렉터리 안의 모든 파일 제외 : folder/
-- 특정 디렉터리의 특정 파일 제외 : folder/style.scc
-- 특정 확장자 파일 모
.gitignore을 통해 관리할 필요가 없는 파일빼고 커밋하기
-- 현재 파일은 "hello.txt, coding.txt, style.css, log.log"가 있다.
-- 1. vim.gitignore : .gitignore 파일 생성
-- 2. 제외할 파일 또는 디렉터리 작성
--- ex)style.css
--- ex)*.log
-- 3. git add . : 작업트리에 있는 전체 파일을 스테이지에 추가
-- 4. git status : git 상태 확인
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: .gitignore
new file: coding.txt
modified: hello.txt
tracked 파일 : git이 버전 관리를 하고 있는 파일
vim bye.txt : bye.txt 파일 생성
git status : git 상태 확인
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: .gitignore
new file: coding.txt
modified: hello.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
bye.txt
git add . : 스테이지에 추가하기
git status : git 상태 확인
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: .gitignore
new file: bye.txt
new file: coding.txt
modified: hello.txt
git commit -m "message3"
$ git commit -m "message3"
[master 9e62bfd] message3
4 files changed, 8 insertions(+), 2 deletions(-)
create mode 100644 .gitignore
create mode 100644 bye.txt
create mode 100644 coding.txt
git log : git 로그 확인
$ git log
commit 9e62bfda9464a2c084600f8b7676805c2f071ce0 (HEAD -> master)
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 13:04:35 2025 +0900
message3
commit 3a456ae1a5f9371571169ee987d32593f88fb223
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 11:16:44 2025 +0900
message2
commit b9f665e8a4670e2bbe884a4cf9df50b01f50c04c
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 11:08:21 2025 +0900
message1
git log --stat : 커밋의 통계를 보여줌
commit 9e62bfda9464a2c084600f8b7676805c2f071ce0 (HEAD -> master)
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 13:04:35 2025 +0900
message3
.gitignore | 2 ++
bye.txt | 4 ++++
coding.txt | 1 +
hello.txt | 3 +--
4 files changed, 8 insertions(+), 2 deletions(-)
commit 3a456ae1a5f9371571169ee987d32593f88fb223
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 11:16:44 2025 +0900
message2
hello.txt | 1 +
1 file changed, 1 insertion(+)
commit b9f665e8a4670e2bbe884a4cf9df50b01f50c04c
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 11:08:21 2025 +0900
message1
hello.txt | 3 +++
1 file changed, 3 insertions(+)
git restore 파일명 : 작업 트리에서 수정한 파일 되돌리기
-- 파일을 수정한 후, 소스가 정상적으로 작동하지 않는 등의 이유로 수정한 내용을 취소하고 가장 최신 버전으로 되돌려야 하는 경우에 사용
vim bye.txt : bye.txt의 내용을 수정
git status : git의 상태 확인
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: bye.txt
no changes added to commit (use "git add" and/or "git commit -a")
sjsj4@sungjae MINGW64 ~/hello-git (master)
git restore bye.txt : "bye.txt" 파일을 수정 전으로 돌림
sjsj4@sungjae MINGW64 ~/hello-git (master)
$ git restore bye.txt
sjsj4@sungjae MINGW64 ~/hello-git (master)
$ cat bye.txt
1
2
3
4:
vim bye.txt : "bye.txt" 파일을 수정
git add bye.txt
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: bye.txt
git status : git의 상태 확인
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: bye.txt
git restore --staged bye.txt
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: bye.txt
no changes added to commit (use "git add" and/or "git commit -a")
vim bye.txt : "bye.txt"파일을 수정
git commit -am "message4"
$ git commit -am "message4"
[master 533e682] message4
1 file changed, 5 insertions(+), 4 deletions(-)
git log : 커밋 기록 확인
$ git log
commit 533e682213b4855e5b64c9a57fd758622dbeadc3 (HEAD -> master)
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 13:20:44 2025 +0900
message4
commit 9e62bfda9464a2c084600f8b7676805c2f071ce0
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 13:04:35 2025 +0900
message3
commit 3a456ae1a5f9371571169ee987d32593f88fb223
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 11:16:44 2025 +0900
message2
commit b9f665e8a4670e2bbe884a4cf9df50b01f50c04c
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 11:08:21 2025 +0900
message1
git reset HEAD^ : 최신 커밋 취소하기
-- 최신 커밋이 취소되고, 스테이지에서도 내려감
-- 취소한 파일은 작업 트리에 남아 있음
-- 아래의 코드는 최신 커밋인 "message4"가 삭제되었다.
$ git log
commit 9e62bfda9464a2c084600f8b7676805c2f071ce0 (HEAD -> master)
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 13:04:35 2025 +0900
message3
commit 3a456ae1a5f9371571169ee987d32593f88fb223
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 11:16:44 2025 +0900
message2
commit b9f665e8a4670e2bbe884a4cf9df50b01f50c04c
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 11:08:21 2025 +0900
message1
😂현실적으로 안쓰는게 Best!!😂
-- 태초에 프로젝트를 진행하면서 엄청 이전버전으로 돌아가는 것 자체가 문제이다.
-- 혹시나 사용할 일이 생기면 soft나 mixed를 사용해라
git reset --옵션 되돌아갈커밋해시 : 특정 커밋으로 되돌리기
-- --hard : 특정버전의 커밋으로 되돌린 다음 그 이후 버전을 삭제
-- --soft : 커밋 이력은 삭제되지만 변경 내용은 스테이지 상태로 남아있음
-- --mixed : 커밋 이력은 삭제되지만 변경 내용은 작업트리에 남아있음
cf. 커밋해쉬란?
-- 아래 코드 중 commit 옆에 적혀있는 숫자들이다.
```bash
$ git log
commit 9e62bfda9464a2c084600f8b7676805c2f071ce0 (HEAD -> master)
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 13:04:35 2025 +0900
message3
commit 3a456ae1a5f9371571169ee987d32593f88fb223
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 11:16:44 2025 +0900
message2
commit b9f665e8a4670e2bbe884a4cf9df50b01f50c04c
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 11:08:21 2025 +0900
message1
```
위의 과정을 4번 반복하라(test commit 4까지)
-- vim text.txt : text.txt 생성, 있으면 수정
-- git add test.txt : 스테이지에 추가
-- git commit -m "test commit 1" : 커밋
git log : git 로그 확인
$ git log
commit ff16f686536a5dc6cc952a446f27e2e7b65e1dae (HEAD -> master)
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 13:36:20 2025 +0900
test commit4
commit 2bb81e1628fc0147cec356fbb38c23ca447311f9
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 13:35:57 2025 +0900
test commit3
commit b5a73f4dc7baa1eeecac86020cb2199089e665ad
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 13:35:33 2025 +0900
test commit2
commit 790469b66009e7d97f7e341dc23b87407b730ac9
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 13:34:59 2025 +0900
test commit1
git reset --hard 커밋해쉬주소
$ git reset --hard b5a73f4dc7baa1eeecac86020cb2199089e665ad
HEAD is now at b5a73f4 test commit2
cat test.txt : test.txt 파일 확인
$ cat test.txt
a
b
😂현실적으로 안쓰는게 Best!!😂
-- 만약에 써야 할 일이 생긴다면 reset 말고 revert를 사용해라
git revert 취소할커밋해시
-- 기존 커밋을 삭제하지 않고, 특정 커밋을 되돌리는 새로운 커밋을 추가하는 방식
-- 커밋 기록을 변경하지 않고, 안전하게 작업을 취소하는 방법
-- 협업 환경에서 주로 사용 / 팀프로젝트할 때 revert를 꼭 써야함
-- revert를 사용할 경우에는 최신버전부터 취소하며 원하는 버전으로 가야함
--- why? 최신버전과 원하는 버전 사이에 낀 코드와 충돌할 수 있음
vim test.txt : test.txt 파일에 내용 추가
git commit -am "test commit 5" : 스테이징과 커밋 동시 실행
git log : git 로그확인
$ git log
commit 9cded73ba615a17dab9e71493bf09af4e230c596 (HEAD -> master)
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 14:10:04 2025 +0900
test commit 5
commit b5a73f4dc7baa1eeecac86020cb2199089e665ad
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 13:35:33 2025 +0900
test commit2
commit 790469b66009e7d97f7e341dc23b87407b730ac9
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 13:34:59 2025 +0900
test commit1
git revert 취소할커밋해시
-- test commit 5를 취소하려한다.
git revert 9cded73ba615a17dab9e71493bf09af4e230c596
cat test.txt : 파일 확인
$ cat test.txt
a
b
git log : 로그 확인
-- 아래를 보면 커밋이 보류된 로그가 남아있다.
$ git log
commit dd85610ae4a5591b283235a266bb2a4f4bc5ae7e (HEAD -> master)
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 14:14:03 2025 +0900
Revert "test commit 5"
커밋 메시지 작성 : 커밋 보류함
This reverts commit 9cded73ba615a17dab9e71493bf09af4e230c596.
commit 9cded73ba615a17dab9e71493bf09af4e230c596
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 14:10:04 2025 +0900
test commit 5
commit b5a73f4dc7baa1eeecac86020cb2199089e665ad
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 13:35:33 2025 +0900
test commit2
commit 790469b66009e7d97f7e341dc23b87407b730ac9
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 13:34:59 2025 +0900
test commit1
git revert 취소할커밋해시
-- test commit 1으로 돌아가기 위해 test commit 2를 취소하려한다.
git revert b5a73f4dc7baa1eeecac86020cb2199089e665ad
cat test.txt : 파일 확인
$ cat test.txt
a
git log : 로그 확인
$ git log
commit 554bf55f7e9ec03120d1eb2df7ea287e9936a31d (HEAD -> master)
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 14:19:06 2025 +0900
Revert "test commit2"
나는 1로 가고싶어.. 미안해
This reverts commit b5a73f4dc7baa1eeecac86020cb2199089e665ad.
commit dd85610ae4a5591b283235a266bb2a4f4bc5ae7e
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 14:14:03 2025 +0900
Revert "test commit 5"
커밋 메시지 작성 : 커밋 보류함
This reverts commit 9cded73ba615a17dab9e71493bf09af4e230c596.
commit 9cded73ba615a17dab9e71493bf09af4e230c596
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 14:10:04 2025 +0900
test commit 5
commit b5a73f4dc7baa1eeecac86020cb2199089e665ad
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 13:35:33 2025 +0900
test commit2
commit 790469b66009e7d97f7e341dc23b87407b730ac9
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 13:34:59 2025 +0900
test commit1
브랜치(branch)
-- 독립적으로 작업을 진행할 수 있도록 해주는 기능
--- 메인 작업 흐름(master,main)에서 나와, 다른작업을 분리해서 진행할 수 있도록 함
--- 하나의 프로젝트에서 여러 개발자가 서로 다른 작업을 진행 시, 서로의 작업에 영향을 주지 않기 위해 필요
기준 브랜치
-- main or master 브랜치
-- git으로 버전 관리를 시작하면 기본적으로 생성
분기(branch)
-- master 브랜치에서 새로운 브랜치를(A,B)를 생성

분기된 브랜치의 특징
-- 분기되기 이전에 master가 작업한 내용 유지(C1,C2)
-- 새로운 기능 생성 가능(a1,a2)
디렉터리 생성
sjsj4@sungjae MINGW64 ~
$ mkdir manual
sjsj4@sungjae MINGW64 ~
$ cd manual
git 초기화
$ git init
Initialized empty Git repository in C:/Users/sjsj4/manual/.git/
work.txt 만들어서 3번 커밋하기
sjsj4@sungjae MINGW64 ~/manual (master)
$ vim work.txt
sjsj4@sungjae MINGW64 ~/manual (master)
$ git add work.txt
warning: in the working copy of 'work.txt', LF will be replaced by CRLF the next time Git touches it
sjsj4@sungjae MINGW64 ~/manual (master)
$ git commit -m "work1"
[master (root-commit) 669052f] work1
1 file changed, 1 insertion(+)
create mode 100644 work.txt
sjsj4@sungjae MINGW64 ~/manual (master)
$ vim work.txt
sjsj4@sungjae MINGW64 ~/manual (master)
$ git commit -am "work2"
warning: in the working copy of 'work.txt', LF will be replaced by CRLF the next time Git touches it
[master cb7b27d] work2
1 file changed, 1 insertion(+)
sjsj4@sungjae MINGW64 ~/manual (master)
$ vim work.txt
sjsj4@sungjae MINGW64 ~/manual (master)
$ git commit -am "work3"
warning: in the working copy of 'work.txt', LF will be replaced by CRLF the next time Git touches it
[master 90bc41b] work3
1 file changed, 1 insertion(+)
sjsj4@sungjae MINGW64 ~/manual (master)
$ git log
commit 90bc41b90c325b7314b072fb9c962a9b09ee1b26 (HEAD -> master)
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 14:38:40 2025 +0900
work3
commit cb7b27d6f88dff7c93a3709ef1672f228df758be
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 14:38:21 2025 +0900
work2
commit 669052f4b414fd46251dc4839f52dff6194f05c2
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 14:37:57 2025 +0900
work1
git branch : 생성되어 있는 브랜치 확인
$ git branch
* master
git branch A : A 브랜치 생성
git branch B : B 브랜치 생성
git branch : 생성되어 있는 브랜치 확인
$ git branch
A
B
* master
git log : 로그 확인
-- work3를 master, A, B 셋 다 알고 있다.
$ git log
commit 90bc41b90c325b7314b072fb9c962a9b09ee1b26 (HEAD -> master, B, A) #A,B가 추가되었음
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 14:38:40 2025 +0900
work3
commit cb7b27d6f88dff7c93a3709ef1672f228df758be
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 14:38:21 2025 +0900
work2
commit 669052f4b414fd46251dc4839f52dff6194f05c2
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 14:37:57 2025 +0900
work1
vim work.txt : 내용 수정
git commit -am "master commit content 4" : 커밋 실행
git log : 로그 확인
-- 아래의 코드를 보면 HEAD는 master에 향해있고, (A,B)는 work3 까지만 안다.
$ git log
commit 57eda1d9b16462bfc3d63c2a8650d31a2a339ee4 (HEAD -> master)
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 14:45:56 2025 +0900
master commit content 4
commit 90bc41b90c325b7314b072fb9c962a9b09ee1b26 (B, A)
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 14:38:40 2025 +0900
work3
commit cb7b27d6f88dff7c93a3709ef1672f228df758be
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 14:38:21 2025 +0900
work2
commit 669052f4b414fd46251dc4839f52dff6194f05c2
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 14:37:57 2025 +0900
work1
git switch 브랜치이름 : 브랜치 이동하기
-- ex) git switch A : A 브랜치로 이동하기
$ git switch A
Switched to branch 'A'
git branch
$ git branch
* A
B
master
git branch : 브랜치 확인
$ vim work.txt
sjsj4@sungjae MINGW64 ~/manual (A)
$ vim hello.txt
sjsj4@sungjae MINGW64 ~/manual (A)
$ git add .
warning: in the working copy of 'hello.txt', LF will be replaced by CRLF the next time Git touches it
sjsj4@sungjae MINGW64 ~/manual (A)
$ git commit -m "A content 4"
[A 8029402] A content 4
2 files changed, 2 insertions(+)
create mode 100644 hello.txt
sjsj4@sungjae MINGW64 ~/manual (A)
$ git log
commit 802940216858e8447a50a040a64268e9df572de8 (HEAD -> A)
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 15:08:26 2025 +0900
A content 4
commit 90bc41b90c325b7314b072fb9c962a9b09ee1b26 (B)
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 14:38:40 2025 +0900
work3
commit cb7b27d6f88dff7c93a3709ef1672f228df758be
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 14:38:21 2025 +0900
work2
commit 669052f4b414fd46251dc4839f52dff6194f05c2
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 14:37:57 2025 +0900
work1
sjsj4@sungjae MINGW64 ~/manual (A)
$ cat work.txt
content 1
content 2
content 3
A content 4
git log --online -- branches : 브랜치 마다 커밋 로그 확인하기
$ git log --oneline --branches
8029402 (HEAD -> A) A content 4
57eda1d (master) master commit content 4
90bc41b (B) work3
cb7b27d work2
669052f work1
git log 기준브랜치..비교브랜치
-- 마스터 브랜치에는 없고, A 브랜치에는 있는 커밋을 보여줌
-- ex) git log master..A
$ git log master..A
commit 802940216858e8447a50a040a64268e9df572de8 (HEAD -> A)
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 15:08:26 2025 +0900
A content 4
git switch master : master 브랜치로 이동하기
$ git switch master
Switched to branch 'master'
git merge A : master에 A브랜치 병합하기
-- 아래의 코드는 work.txt에서 오류가 났다.
-- 이유는 master도 4번째에 코드작성을 했고, A도 4번째에 코드작성을 했다.
$ git merge A
Auto-merging work.txt
CONFLICT (content): Merge conflict in work.txt
Automatic merge failed; fix conflicts and then commit the result.
vim work.txt : work.txt 파일 확인
content 1
content 2
content 3
<<<<<<< HEAD
content 4 # 현재 브랜치(master)에서 수정한 내용
=======
A content 4 # 병합할 브랜치(A)에서 수정한 내용
>>>>>>> A
-- 파일 내용을 원하는 대로 수정하고 저장
--- <<<<<<< HEAD, =======, >>>>>>> A는 삭제
content 1
content 2
content 3
content 4
A content 4
git commit -am "merge A branch" : work.txt파일 스테이징 및 커밋하기
$ git commit -am "merge A branch"
[master 1e8efbc] merge A branch
cat work.txt : 최종 확인
$ cat work.txt
content 1
content 2
content 3
content 4
A content 4
github에 새로운 원격저장소를 만든다.

기본적인 원격저장소 셋팅 방법이다.

원격저장소 주소를 확인한다.

conn.txt 생성 후 원격 저장소 연결까지
$ vim conn.txt
sjsj4@sungjae MINGW64 ~/manual (master)
$ git add conn.txt
warning: in the working copy of 'conn.txt', LF will be replaced by CRLF the next time Git touches it
sjsj4@sungjae MINGW64 ~/manual (master)
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: conn.txt
sjsj4@sungjae MINGW64 ~/manual (master)
$ git commit -m "add a"
[master 8ace95b] add a
1 file changed, 1 insertion(+)
create mode 100644 conn.txt
sjsj4@sungjae MINGW64 ~/manual (master)
$ git branch -M main # 기존 master에서 main 브랜치로 변경
sjsj4@sungjae MINGW64 ~/manual (main) #main으로 바뀐것을 확인가능
$ git remote add origin https://github.com/sungjaekimana/sesac.git
sjsj4@sungjae MINGW64 ~/manual (main)
$ git remote -v # 원격저장소에 연결되었는지 확인
origin https://github.com/sungjaekimana/sesac.git (fetch)
origin https://github.com/sungjaekimana/sesac.git (push)
git push -u origin main : 원격저장소에 파일 올리기
-- -u : 지역저장소의 브랜치를 원격저장소에 연결, 최초 한번만 실행하면 됨
-- origin : 원격저장소 주소
-- main : 원격저장소 브랜치 이름
-- 아래는 성공했다는 의미임
$ git push -u origin main
info: please complete authentication in your browser...
Enumerating objects: 22, done.
Counting objects: 100% (22/22), done.
Delta compression using up to 16 threads
Compressing objects: 100% (11/11), done.
Writing objects: 100% (22/22), 1.63 KiB | 418.00 KiB/s, done.
Total 22 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (1/1), done.
To https://github.com/sungjaekimana/sesac.git
* [new branch] main -> main
branch 'main' set up to track 'origin/main'.
vim conn.txt의 내용을 수정하고 github에 push
-- 아래의 코드를 참고해라
$ vim conn.txt # vin conn.txt 수정
sjsj4@sungjae MINGW64 ~/manual (main)
$ git add conn.txt # conn.txt 파일을 스테이지에 추가
warning: in the working copy of 'conn.txt', LF will be replaced by CRLF the next time Git touches it
sjsj4@sungjae MINGW64 ~/manual (main)
$ git commit -m "add b" # 커밋
[main 71079b3] add b
1 file changed, 1 insertion(+)
sjsj4@sungjae MINGW64 ~/manual (main)
$ git push # github에 파일 업로드
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 16 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 298 bytes | 298.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
To https://github.com/sungjaekimana/sesac.git
8ace95b..71079b3 main -> main
pull : 원격저장소에서 파일 다운로드
-- 원격저장소와 지역저장소의 상태가 다른 경우 사용
-- 원격저장소와 지역저장소의 상태를 같게 만드는 과정
git pull origin main : 원격저장소의 내용을 가져오기
$ git pull origin main
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
Unpacking objects: 100% (3/3), 974 bytes | 194.00 KiB/s, done.
From https://github.com/sungjaekimana/sesac
* branch main -> FETCH_HEAD
71079b3..9492387 main -> origin/main
Updating 71079b3..9492387
Fast-forward
conn2.txt | 3 +++
1 file changed, 3 insertions(+)
create mode 100644 conn2.txt
ls : ls를 통한 확인
-- github의 conn2.txt가 다운됐음을 확인
$ ls
conn.txt conn2.txt hello.txt work.txt
지역저장소와 원격저장소의 브랜치가 다른 경우 → 에러 발생

git clone 원격저장소주소 home_pc
-- home_pc 디렉터리에 원격저장소 복제하기
$ git clone https://github.com/sungjaekimana/sesac.git home_pc
Cloning into 'home_pc'...
remote: Enumerating objects: 28, done.
remote: Counting objects: 100% (28/28), done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 28 (delta 2), reused 24 (delta 1), pack-reused 0 (from 0)
Receiving objects: 100% (28/28), done.
Resolving deltas: 100% (2/2), done.
git clone 원격저장소주소 office_pc
-- office_pc 디렉터리에 원격저장소 복제하기
$ git clone https://github.com/sungjaekimana/sesac.git office_pc
Cloning into 'office_pc'...
remote: Enumerating objects: 28, done.
remote: Counting objects: 100% (28/28), done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 28 (delta 2), reused 24 (delta 1), pack-reused 0 (from 0)
Receiving objects: 100% (28/28), done.
Resolving deltas: 100% (2/2), done.
home_pc에 들어가서 git log 확인
-- clone을 사용하면 알아서 git 폴더로까지 지정을 해줘서 git log까지 확인가능
$ cd home_pc
$ git log
commit 949238718504551d9b45350424c7b1b1f01f7952 (HEAD -> main, origin/main, origin/HEAD)
Author: Pysung.py <sjsj4123@gmail.com>
Date: Thu May 22 16:44:22 2025 +0900
Create conn2.txt
commit 71079b3ed5f60a1f7ae3ad9c1eed194dae604752
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 16:42:46 2025 +0900
add b
commit 8ace95b31f8731a9ddfe4426275924eac86e9926
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 15:48:31 2025 +0900
add a
commit 1e8efbcf405d63f0013bcf0ef9cc06fe4fcbd2d3
Merge: 57eda1d 8029402
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 15:25:35 2025 +0900
merge A branch
commit 802940216858e8447a50a040a64268e9df572de8
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 15:08:26 2025 +0900
A content 4
commit 57eda1d9b16462bfc3d63c2a8650d31a2a339ee4
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 14:45:56 2025 +0900
master commit content 4
commit 90bc41b90c325b7314b072fb9c962a9b09ee1b26
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 14:38:40 2025 +0900
work3
commit cb7b27d6f88dff7c93a3709ef1672f228df758be
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 14:38:21 2025 +0900
work2
commit 669052f4b414fd46251dc4839f52dff6194f05c2
Author: Sungjae <sjsj4123@gmail.com>
Date: Thu May 22 14:37:57 2025 +0900
work1
git remote -v : 지역저장소가 원격저장소와 연결되었는지 확인
$ git remote -v
origin https://github.com/sungjaekimana/sesac.git (fetch)
origin https://github.com/sungjaekimana/sesac.git (push)
home_pc에서 firstHome.txt 만들고 지역 저장소로 commit
$ git remote -v
origin https://github.com/sungjaekimana/sesac.git (fetch)
origin https://github.com/sungjaekimana/sesac.git (push)
$ vim firstHome.txt
$ git add firstHome.txt
warning: in the working copy of 'firstHome.txt', LF will be replaced by CRLF the next time Git touches it
$ git commit -m "add fitstHome"
[main 81ba4d9] add fitstHome
1 file changed, 3 insertions(+)
create mode 100644 firstHome.txt
git push : 지역 저장소의 커밋을 원격 저장소에 올리기
$ git push
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 16 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 235 bytes | 235.00 KiB/s, done.
Total 2 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/sungjaekimana/sesac.git
9492387..81ba4d9 main -> main
office pc로 이동하여 github의 코드 받아오기
$ cd office_pc
$ git pull
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 2 (delta 1), reused 2 (delta 1), pack-reused 0 (from 0)
Unpacking objects: 100% (2/2), 215 bytes | 35.00 KiB/s, done.
From https://github.com/sungjaekimana/sesac
9492387..81ba4d9 main -> origin/main
Updating 9492387..81ba4d9
Fast-forward
firstHome.txt | 3 +++
1 file changed, 3 insertions(+)
create mode 100644 firstHome.txt
office_pc에서 firstHome.txt 파일 수정 후 지역저장소에 commit
$ vim firstHome.txt
$ git add firstHome.txt
$ git commit -m "add 4"
[main 479cc2c] add 4
1 file changed, 1 insertion(+)
원격저장소에 push
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 16 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 258 bytes | 258.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/sungjaekimana/sesac.git
81ba4d9..479cc2c main -> main
$ cd game
sjsj4@sungjae MINGW64 ~/game (main)
$ ls
README.md game.py
sjsj4@sungjae MINGW64 ~/game (main)
$ vim game.py
sjsj4@sungjae MINGW64 ~/game (main)
$ git commit -am "add my text"
[main de19a5c] add my text
1 file changed, 1 insertion(+)
sjsj4@sungjae MINGW64 ~/game (main)
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 16 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 315 bytes | 315.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To https://github.com/sungjaekimana/Python-Game.git
8cb2b74..de19a5c main -> main