diff --git a/Yeobi00.md b/Yeobi00.md
deleted file mode 100644
index c7f2878..0000000
--- a/Yeobi00.md
+++ /dev/null
@@ -1,2 +0,0 @@
-안녕안녕 나는 엽이야
-헬륨가스 마셨더니 요렇게 됐지 ~
\ No newline at end of file
diff --git "a/\355\231\215\354\227\275/HW1.md" "b/\355\231\215\354\227\275/HW1.md"
new file mode 100644
index 0000000..03ea792
--- /dev/null
+++ "b/\355\231\215\354\227\275/HW1.md"
@@ -0,0 +1,436 @@
+# Git & Github
+
+## Git이란?
+
+### Git : 버전 관리 프로그램으로서, 동시 협업을 가능하게 해줌.
+
+1. 지난 과정 확인 가능
+2. 이전 버전으로 돌아갈 수 있음.
+3. 다른 컴퓨터, 즉 원격 저장소 github에 작업물을 보내 백업 가능
+
+- .**gitignore 파일** : working directory 내에 존재하는 파일들 중에서 마치 존재하지 않는 것처럼 git이 인식해야 할 파일들의 목록이 적힌 파일
+ - .gitignore 파일에 버전 관리할 필요가 없는 것들을 추가하면서 진행하면 더 깔끔하게 버전 관리 가능
+
+### 운영 체제(Operation System, OS) : 입력과 출력을 연결
+
+- 컴퓨터는 입력과 출력의 기능만 하는데, 이를 연결해주는 역할을 해줌.
+- 여러 제조사의 하드웨어를 고려하여 애플리케이션에 신호를 연결해줌.
+- 운영 체제의 도움으로, 여러 애플리케이션이 작동 가능
+
+
+
+### 레포지토리와 커밋
+
+- **레포지토리(repository)** : 커밋이 저장되는 장소
+ - 프로젝트 디렉토리에 버전 별로 프로젝트 모습, 변경 사항에 대한 설명이 있음.
+ - .git 디렉토리가 레포지토리이며, 숨겨져 있음.
+
+ ```bash
+ # 비어있는 레포지토리(.git 레포지토리) 생성
+ $ git init
+ ```
+
+ - 터미널에서 숨긴 파일을 확인하는 방법
+
+ 1) Mac : $ ls -al
+
+ 2) Windows cmd : $ dir /a
+
+ 3) Powershell : $ Get-ChildItem-Force
+
+ - $ cd .. : 상위 폴더로 나가는 커맨드
+ - $ touch [파일 이름] : 현재 위치에서 파일 생성
+
+- **커밋(commit)** : 프로젝트 디렉토리의 특정 모습을 하나의 버전으로 남기는 행위 및 결과물
+ - 프로젝트 디렉토리의 버전을 하나로 남김.
+
+ ex) 커밋1 — 커밋2 — 커밋3 — 커밋4 — …
+
+
+- **커밋 커맨드**
+ - 커밋하기 전에 git에게 커밋하는 사람 알려주기
+
+ ```bash
+ $ git config user.name "Yeobi"
+ $ git config user.email "kimhyjjang@gmail.com"
+ ```
+
+
+ - 커밋할 파일을 미리 지정해주기
+
+ ```bash
+ # staging area에 파일 추가
+ $ git add [파일 이름]
+
+ # 현재 프로젝트 디렉토리 내에서 변경사항이 생긴 모든 파일을 staging area에 추가
+ $ git add .
+ ```
+
+
+ - staging area에서 파일 제거하기
+
+ ```bash
+ $ git reset [파일 이름]
+ ```
+
+ # nothing to commit, working tree clean : 이전 커밋 이후로 변경사항 없음.
+
+
+ - git이 인식하고 있는 프로젝트 디렉토리의 현재 상태 보여주기
+
+ ```bash
+ $ git status
+ ```
+
+
+ - git 커맨드의 의미와 사용법을 자세히 알아보기
+
+ ```bash
+ $ git help [커맨드]
+ # 또는
+ $ man git- [커맨드]
+ ```
+
+
+### Git으로 관리되는 파일이 가지는 일종의 ‘상태(status)’
+
+1. **Untracked 상태** : 한 번도 git add 해주지 않아 파일이 git에 의해 변동사항이 전혀 추적되고 있지 않은 상태
+2. **Tracked 상태** : 파일이 git에 의해 그 변동사항이 추적되고 있는 상태
+
+ 1) **Staged 상태** : 파일의 내용이 수정된 후, staging area에 올라와 있는 상태
+
+ - 새로 생성한 파일에 내용을 쓰고 git add 해준 상태
+ - 한 번이라도 커밋에 포함됐었던 내용이 최신 커밋의 모습과 비교했을 때 전혀 바뀐 게 없는 상태
+
+ 2) **Unmodified 상태** : 현재 파일의 내용이 최신 커밋의 모습과 비교했을 때 전혀 바뀐 게 없는 상
+
+ - 커밋을 하고 난 직후, working directory 안의 모든 파일들이 이 상태가 됨.
+
+ 3) **Modified 상태** : 최신 커밋 모습과 비교했을 때 조금이라도 바뀐 내용이 있는 상태
+
+
+---
+
+## Github란?
+
+- 깃허브의 레포지토리 : **리모트 레포지토리** vs 내 컴퓨터의 레포지토리 : **로컬 레포지토리**
+- 목적 : 1) 안전성 2) 협업 가능
+- **git push** 커맨드를 통해 로컬 레포지토리의 내용 → 리모트 레포지토리에 반영
+- **git push** 는 리모트 레포지토리의 주인인 본인만 가능, 타인도 할 수 있게 해주려면 collaborator로 지정
+- 로컬 레포지토리를 수정하는 동안 깃허브에 변화가 생기면 git push 불가능
+
+ → git pull 먼저 한 다음, merge 완료하고, git push 진행
+
+- 파일 이름이 README일 경우, 내용을 바로 보여줌.
+ - README.md
+ 1. 어떤 프로젝트인지 설명하거나
+ 2. 프로그램의 주요 사용법을 알려주거나
+ 3. 프로그램을 실행시키려면 어떤 사전 작업이 필요한지 알려주는 내용을 적음.
+ - .md 확장자 : markdown의 준말로, 특정 규칙에 맞게 간단한 텍스트만으로 어떤 표시를 해두면 자동으로 HTML 태그로 전환되도록 약속한 문법
+
+ → 단지 텍스트만으로도 내용의 디자인을 예쁘게 만들 수 있음.
+
+ - 일반적으로 프로젝트의 관한 설명을 담고 있기 때문에 내용을 바로 보여줌.
+
+
+- **협업하기**
+ - **git fetch** 커맨드 사용
+ - Github에서 가져온 브랜치의 내용을 merge하기 전에 점검해야 할 필요가 있을 때
+ - Github에 있는 브랜치의 내용과 내가 작성한 코드를 비교하며 검토하고자 할 때
+
+ | git pull | git fetch |
+ | --- | --- |
+ | 로컬 레포지토리에 merge까지 진행 | 로컬 레포지토리에 merge는 진행 x |
+ - 책임 소재 묻기
+
+ ```python
+ # 해당 파일의 특정 코드를 누가 작성했는지 찾아내기
+ $ git blame [파일 이름]
+
+ # 커밋 author 찾아내기
+ $ git show [커밋 id]
+ ```
+
+
+- **관련 코드**
+
+ ```bash
+ # 로컬 레포지토리의 내용을 처음으로 리모트 레포지토리에 올릴 때
+ $ git push -u origin main
+
+ # 로컬 레포지토리의 내용을 리모트 레포지토리에 보내기
+ $ git push
+
+ # 리모트 레포지토리의 내용을 로컬 레포지토리로 가져오기
+ $ git pull
+
+ # Github에 있는 프로젝트를 내 컴퓨터로 가져오기
+ $ git clone [프로젝트의 Github 상 주소]
+
+ # Github에 있는 브랜치의 내용을 일단 가져와서 살펴본 후, merge하길 원할 때 사용
+ $ git fetch
+ ```
+
+
+---
+
+## Commit 다루기
+
+### **커밋 가이드라인**
+
+- **커밋 해시** : 커밋 관리를 위해 커밋 각각에 대해 id를 부여함.
+- **커밋 메시지**
+ 1. 커밋 메시지 제목과 상세 설명 사이에 한 줄 비워두기
+ 2. 커밋 메시지 제목 뒤에 온점 붙이지 않기
+ 3. 커밋 메시지 제목의 첫 번째 알파벳은 대문자로 작성
+ 4. 커밋 메시지 제목은 명령조로 작성
+ 5. 커밋의 상세 내용에 커밋 이유, 어떤 문제가 있었는지, 적용한 해결책이 어떤 효과를 가지는지 적으면 좋음.
+- 하나의 커밋에는 하나의 수정사항만 남기기
+- 현재 프로젝트 디렉토리의 상태가 그 내부의 전체 코드를 실행했을 때 에러가 발생하지 않는 경우에만 커밋하기
+
+### HEAD와 커밋
+
+- **HEAD** : 브랜치를 통해 커밋을 간접적으로 가리키는 포인터
+ - **Detached HEAD** : HEAD가 main 브랜치를 가리키는 게 아니라 직접 커밋을 가리키고 있는 상태의 HEAD
+ - 과거의 특정 커밋에서 새로운 브랜치를 만들고 싶을 때 **git checkout** 커맨드를 통해 커밋을 이동함.
+ - **git checkout** : HEAD가 직접적으로 가리키는 것을 바꿀 수 있고, 커맨드 뒤에 커밋 id나 브랜치 이름을 줘서 직접 커밋 또는 브랜치를 가리키도록 할 수 있음.
+ - Working Directory는 HEAD가 가리키는 커밋에 따라 구성
+- **git reset** : HEAD가 과거의 커밋을 가리키게 할 수 있고, working directory의 내용도 과거 커밋의 모습으로 돌아가게 할 수 있음.
+
+ → 과거의 커밋으로 아예 돌아가고 싶을 때 사용
+
+ - 과거의 커밋으로 git reset을 하더라도 그 이후의 커밋들이 삭제되는 게 아니라 계속 남아있음.
+ - 과거뿐만 아니라 현재 HEAD가 가리키는 커밋 이후의 커밋으로도 돌아갈 수 있음.
+
+ ```bash
+ # HEAD가 해당 커밋을 가리키게 해 과거로 돌아가기
+ $ git reset —hard [커밋 id]
+
+ # HEAD가 가리키는 커밋의 바로 이전 커밋으로 돌아가기
+ $ git reset —hard HEAD^
+
+ # HEAD가 가리키는 커밋보다 n단계 전의 커밋으로 돌아가기
+ $ git reset —hard HEAD~(n)
+ ```
+
+ - **—soft** : HEAD가 과거의 특정 커밋을 가리키도록 함.
+ - **—mixed** : staging area를 과거 특정 커밋의 내용과 똑같게 만듦.
+ - **—hard** : working directory를 과거 특정 커밋의 내용과 똑같게 만듦.
+
+
+
+- **git revert** : 과거의 커밋으로 돌아가고, 기록을 남김
+
+ ```python
+ # 과거 커밋으로 돌아가기
+ $ git revert [커밋 id]
+
+ # id1 다음 커밋부터 id2까지 커밋을 id1 커밋으로 되돌리기
+ $ git revert [커밋 id1]..[커밋 id2]
+ ```
+
+- **git reflog** : reference log의 약자로, HEAD가 이때까지 가리켜왔던 커밋들을 보여줌.
+ - HEAD가 가리켰던 커밋들의 id를 확인할 수 있음.
+ - $ git reflog한 뒤, $ git reset —hard [커밋 id] 커맨드 활용
+- **git log** : 커밋 히스토리 확인
+
+ ```python
+ # 한 줄로 모든 브랜치의 커밋을 보여주기
+ $ git log --pretty=oneline --all
+
+ # 모든 브랜치의 커밋을 그림과 함께 입체적으로 보여주기
+ $ git log --pretty=oneline --all --graph
+ ```
+
+
+---
+
+## Branch에 대해..
+
+### Branch : 하나의 코드 관리 흐름을 뜻하며, 어떤 커밋을 가리키는 포인터
+
+ **# On branch main** : main 브랜치 위에 있다는 의미
+
+- **Remote Repository의 브랜치**
+ - **$ git remote add origin [깃허브 주소]** 에서
+ - **remote** : 리모트 레포지토리에 관한 작업을 할 때 쓰는 커맨드
+ - **add** : 새로운 리모트 레포지토리 등록
+ - **origin [깃허브 주소]** : 깃허브 주소를 origin 이라는 이름으로 등록
+
+ → origin 대신 다른 단어를 입력해도 상관 없지만, origin 사용이 관례!
+
+ - **$ git push -u origin main** : 현재 로컬 레포지토리에 있는 main 브랜치의 내용을 origin이라는 리모트 레포지토리로 보낸다는 의미임.
+ - **-u (—set-upstream)** : 로컬 레포지토리의 main 브랜치가 origin의 main 브랜치를 tracking 한다는 의미임.
+ - **tracking** : 로컬 레포지토리의 한 브랜치가 리모트 레포지토리의 한 브랜치와 연결되어 그것을 계속 바라보는 상태가 되는 것
+ - **main** : 로컬 레포지토리의 main 브랜치
+ - **origin/main** : 리모트 레포지토리의 main 브랜치
+ - 새로 만든 브랜치에서 github로 보내려 하는데, 오류 발생 예시
+
+ # fatal: The current branch premium has no upstream branch.
+
+ # To push the current branch and set the remote as upstream, use
+
+ # git push --set-upstream origin premium
+
+ → **$ git push —set-upstream origin premium** 커맨드 입력하면 github와 브랜치를 연결하여 해결 가능!
+
+ - 리모트 레포지토리의 브랜치에 문제 발생 시, 해결 방법
+ - 잘못된 코드를 추가한 개발자에게 함수를 지우고 다시 리모트 레포지토리에 올려달라고 하기
+ - 잘못된 부분을 알아서 해결하고 다시 git push 하기
+- Branch 관련 **git 커맨드**
+
+ ```bash
+ # 브랜치 생성
+ $ git branch [브랜치 이름]
+
+ # 해당 브랜치로 이동
+ $ git checkout [브랜치 이름]
+
+ # 브랜치 조회
+ $ git branch
+
+ # 해당 브랜치 삭제
+ $ git branch -d [브랜치 이름]
+
+ # 브랜치를 생성한 뒤, 그 브랜치로 이동
+ $ git checkout -b [브랜치 이름]
+ ```
+
+
+### Merge와 Conflict
+
+- **merge** : 브랜치를 병합하는 것으로, HEAD가 가리키던 커밋에 다른 브랜치가 가리키던 커밋을 합쳐서 새로운 커밋을 만드는 작업
+- **merge 커밋** : merge를 통해서 생겨난 커밋
+- **Fast-forward merge** : 새로운 커밋이 생기는 것이 아니라 단지 브랜치가 이동하게 되는 merge
+- **3-way merge** : 3가지 커밋을 고려하여 merge를 함.
+ - base 때의 내용과 비교했을 때 달라진 부분이 있는 것이 우선시됨.
+ - 두 브랜치에서 둘 다 변화가 일어났을 때에는 Conflict를 발생시켜서 사용자가 스스로 선택하게끔 함.
+- merge 관련 **git 커맨드**
+
+ ```bash
+ # 현재 위치 브랜치에 해당 브랜치를 merge하기
+ $ git merge [브랜치 이름]
+
+ # merge 취소하기
+ $ git merge --abort
+ ```
+
+- Merge 도중 conflict 발생 가능
+
+ # CONFLICT (content): Merge conflict in [calculator.py](http://calculator.py/) → merge 도중 충돌 발생
+
+ - **Conflict 해결 방법**
+ - 하나의 파일에서 conflict 발생 시
+ 1. 충돌이 발생한 파일 열기
+ 2. merge의 결과가 되었으면 하는 모습대로 코드 수정하기
+ - 여러 개의 파일에서 conflict 발생 시
+
+ 1) 각각의 파일의 conflict를 하나씩 해결하고 $ git add [파일 이름] 커맨드 입력
+
+ 2) 모든 파일들의 conflict를 다 해결하고 한 번에 $ git add . 커맨드 입력
+
+ - **Merge 취소 방법**
+ - $ git merge —abort 커맨드 입력하여 merge 취소
+ - merge 취소보다는 충돌 해결한 뒤 커밋하는 것이 정석임!
+
+- **rebase** : 두 커밋을 하나의 커밋으로 깔끔하게 이어붙임.
+ - rebase와 merge의 차이점
+ - rebase는 새로운 커밋을 만들지 않음.
+ - rebase로 만들어진 커밋 히스토리가 merge로 만들어진 커밋 히스토리보다 더 깔끔함.
+
+ | rebase | merge |
+ | --- | --- |
+ | 커밋 히스토리를 깔끔하게 유지해야 할 때 | 두 브랜치를 합쳤다는 정보가 히스토리에 남아야 할 때 |
+
+### Git stash
+
+- working directory에서 작업하던 내용을 git이 스택에 따로 보관해줌.
+- 최근 커밋 이후로 작업했던 내용은 모두 스택에 옮겨지고, working directory 내부는 다시 최근 커밋 상태로 초기화됨.
+
+- 한 브랜치에서 하던 작업을 아직 커밋하지 않았는데, 다른 브랜치로 가야 하는 상황에서 작업 중이던 내용을 잠깐 저장하고 싶을 때 사용
+- 잘못된 브랜치에서 작업했을 때에도 사용
+ 1. git stash로 stack에 작업 내용 저장
+ 2. 올바른 브랜치로 가서 다시 git stash apply 커맨드 입력
+
+
+
+- 관련 코드
+
+ ```bash
+ # git 스택에 잘 저장되었는지 확인하기
+ $ git stash list
+
+ # git 스택에 저장해둔 내용 불러오기
+ $ git stash apply [작업 내용 id]
+
+ # 해당 작업 내용 삭제하기
+ $ git stash drop [작업 내용 id]
+
+ # 특정 작업 내용을 적용함과 동시에 스택에서 제거하기
+ $ git stash pop [작업 내용 id]
+
+ # 자신이 원하는 작업이 들어있는 커밋들만 가져와서 현재 브랜치에 추가하기
+ $ git cherry-pick [커밋 id]
+
+ # 불필요한 커밋들 없애주기
+ $ git reset (--soft / --mixed) [커밋 id]
+ ```
+
+
+---
+
+## Git 커맨드
+
+$ git push -u origin main : 처음으로 로컬 레포지토리의 내용 → 리모트 레포지토리
+
+$ git push : 로컬 레포지토리 내용 → 리모트 레포지토리
+
+$ git pull : 리모트 레포지토리 내용 → 로컬 레포지토리
+
+$ git clone (github 주소) : 깃허브 프로젝트의 레포지토리를 그대로 복제
+
+$ git log : 커밋 히스토리 보기
+
+$ git log —pretty=oneline : 커밋 히스토리를 한 줄로 깔끔하게 보기
+
+$ git config alias.(수정할 커맨드) ‘(원래 있던 커맨드)’ : 커맨드 전체에 별명을 붙여 그 별명으로 사용 가능 (aliasing)
+
+$ git history : git —pretty=oneline 커맨드 별명으로, 한 줄의 커밋 히스토리 보기
+
+$ git show (커밋 id) : 해당 커밋 내용 보여주기
+
+- --- : 해당 커밋 이전의 모습
+- +++ : 해당 커밋에서의 모습
+
+$ git diff (이전 커밋 id) (이후 커밋 id) : 두 커밋 사이의 변화 알아보기
+
+$ git commit —amend : 최신 커밋을 수정해서 다시 새로운 커밋으로 만들기
+
+$ git reset : HEAD가 과거의 커밋을 가리키게 할 수 있고, working directory의 내용도 과거 커밋의 모습으로 돌아가게 함.
+
+- 과거 커밋으로 아예 돌아가고 싶을 때 사용
+
+$ git reset —hard (커밋 id) : HEAD가 해당 커밋을 가리키게 해 과거로 돌아감.
+
+$ git reset --hard HEAD^ : HEAD가 가리키고 있는 커밋의 바로 이전 커밋으로 돌아감.
+
+$ git reset --hard HEAD~(n) : HEAD가 가리키는 커밋보다 n단계 전에 있는 커밋으로 돌아감.
+
+$ git tag : 프로젝트 디렉토리에 있는 모든 태그 조회
+
+$ git tag (태그 이름) (커밋 id) : 커밋에 태그 달기
+
+$ git show (태그 이름) : 태그와 연결된 커밋 살펴보기
+
+$ cat (파일 이름) : 파일 내용 터미널에 출력
\ No newline at end of file
diff --git "a/\355\231\215\354\227\275/README.md" "b/\355\231\215\354\227\275/README.md"
new file mode 100644
index 0000000..e7b1db7
--- /dev/null
+++ "b/\355\231\215\354\227\275/README.md"
@@ -0,0 +1 @@
+안녕하세요 김홍엽입니다.
\ No newline at end of file