├── README.md ├── beginner ├── README.md └── images │ ├── gitflow.png │ └── lifecycle.png ├── image └── inflearn_beginner_main.png └── utilizer └── README.md /README.md: -------------------------------------------------------------------------------- 1 | # 실무자가 알려주는 Git 2 | 3 | ## [🐪 입문편](https://www.inflearn.com/course/git-for-work-part-1?inst=fa1fee22) 4 | ### 인프런 강의 > [실무자가 알려주는 Git - 입문편](https://www.inflearn.com/course/git-for-work-part-1?inst=fa1fee22) 5 | [![실무자가 알려주는 Git - 입문편](./image/inflearn_beginner_main.png)](https://www.inflearn.com/course/git-for-work-part-1?inst=fa1fee22) 6 | ### 강의 자료 > [입문편](./beginner/README.md) 7 | 8 | --- 9 | 10 | ## [🐼 활용편](.) 11 | ### 인프런 강의 > 예정 12 | ### 강의 자료 > [활용편](./utilizer/README.md) 13 | -------------------------------------------------------------------------------- /beginner/README.md: -------------------------------------------------------------------------------- 1 | # 실무자가 알려주는 Git - 입문편 2 | ## 기초 3 | 4 | ### Git 5 | #### What is Git? 6 | - Git is a `free` and `open source` `distributed version control system` designed to `handle everything` from small to very large projects with `speed` and `efficiency`. ([Git 공식사이트](https://git-scm.com/)) 7 | - CVS, SVN, Mercurial 등이 있음 8 | #### Why Git? 9 | - 공유 (협업) 10 | - 대학교 때 USB로 코드 공유한 경험 있음 11 | - 실무에서 일할 때 하나의 프로젝트 내에서 부분을 나눠서 개발하게 됨. 작업이 끝난 코드를 적용해야 개발서버와 리얼서버에 반영할 수 있음 12 | - 내가 작업한 코드를 공용 저장소에 합치기 전에 코드 리뷰를 받을 수 있음 13 | - 보관 (백업) 14 | - 안전하게 웹저장소에 코드를 저장해 놓음 15 | - 언제 어디서든 코드를 내려 받을 수 있음 16 | - GitHub이 망하지 않는 이상 내 코드는 안전 17 | - 대세 18 | - 수많은 IT 기업들에서 사실상 표준으로 Git을 사용함. 엔터프라이즈 GitHub(또는 GitLab 등)도 사용하여서 코드를 관리하고 있음 19 | - 코드를 아무리 잘 짜도 코드를 공유하는데 어려움을 겪으면 실무에서 일하기 힘듦 20 | - 기타 21 | - 개발자 뿐만 아니라 디자이너나 기획 직군도 사용하면 유용 (최종, 진짜 최종, 최종_final ...) 22 | 23 | ### Setting 24 | #### 계정 연결 ([1.6 시작하기 - Git 최초 설정](https://git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-Git-%EC%B5%9C%EC%B4%88-%EC%84%A4%EC%A0%95)) 25 | ```bash 26 | git config --global user.name "Country" 27 | git config --global user.email "hnaras@naver.com" 28 | ``` 29 | 30 | #### alias 31 | ```bash 32 | git config --global alias.co checkout 33 | git config --global alias.br branch 34 | git config --global alias.ci commit 35 | git config --global alias.st status 36 | git config --global alias.lg "log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all" 37 | ``` 38 | - alias 및 현재 Git 설정 상태 보기: `git config --list` 39 | - 참고: [Git Alias](https://git-scm.com/book/ko/v2/Git%EC%9D%98-%EA%B8%B0%EC%B4%88-Git-Alias) 40 | 41 | ### GitHub에 코드 올리기 42 | - GitHub? 43 | - 온라인 코드 저장소 44 | - 무료. 단 비공개 저장소의 경우 3명 이상이 사용할 경우 유료 45 | - 많은 오픈소스들이 GitHub을 사용 46 | - [GitHub](https://github.com/) login 47 | - repository 생성 48 | - ```bash 49 | cd ~ 50 | mkdir git-exer 51 | cd git-exer 52 | echo "Country와 함께하는 Git 교실" >> README.md 53 | git init 54 | git add README.md 55 | git commit -m "initial commit" 56 | git remote add origin https://github.com/HwangNara/git-exer.git 57 | git push -u origin master 58 | ``` 59 | 60 | ### GitHub에서 코드 받기 61 | 62 | #### clone 63 | - 원격 저장소에 있는 코드를 내려 받는 것 64 | - 실무에서 일하면서 새로운 repository를 만들어서 올리는 것보다 이미 다른 사람이 만든 것을 clone 하는 경우가 더 많다. 65 | 66 | #### 강사 repository clone 실습 67 | - https://github.com/HwangNara/git-class 68 | ```bash 69 | cd ~ 70 | git clone https://github.com/HwangNara/git-class 71 | cd git-class 72 | ``` 73 | 74 | #### Vue repository 실습 75 | - https://github.com/vuejs/vue 76 | ```bash 77 | git clone https://github.com/vuejs/vue.git 78 | cd vue 79 | echo "Vue에 코드 기여" >> my.md 80 | git add my.md 81 | git ci -m 'Add my.md' 82 | git push 83 | ??? 84 | ``` 85 | 86 | --- 87 | 88 | ## 기본 89 | ### Git Lifecyle 90 | - 간단히 add & commit(ci) 91 | - add: 이 파일을 Git이 관리하게 하겠다 (or 수정 완료했다) 92 | - commit: 이 파일을 Git에 저장하겠다 93 | - ![lifecyle](./images/lifecycle.png) 94 | - 출처: [2.2 Git의 기초 - 수정하고 저장소에 저장하기](https://git-scm.com/book/ko/v2/Git%EC%9D%98-%EA%B8%B0%EC%B4%88-%EC%88%98%EC%A0%95%ED%95%98%EA%B3%A0-%EC%A0%80%EC%9E%A5%EC%86%8C%EC%97%90-%EC%A0%80%EC%9E%A5%ED%95%98%EA%B8%B0) 95 | - Untracked 96 | - Git과 아무 상관이 없는 상태 97 | - 따라서 Git이 대상 파일을 관리하지 못함 98 | - 최초 `add`를 해줘야 Git의 관리 대상이 됨 99 | - Git이 관리하는 파일을 삭제하면 Untracked가 됨 100 | - Unmodified 101 | - 코드 저장이 완료된 상태 102 | - Staged 상태에서 `commit`을 하면 Unmodified가 됨 103 | - Modified 104 | - Git으로 관리되고 있던 코드를 수정하여 변경이 일어난 상태 105 | - Unmofieid 상태인 파일을 수정하면 Modified가 됨 106 | - `commit` 할 수 없음. `commit` 하려면 Staged 상태가 되야함 107 | - Staged 108 | - 이제 코드를 저장해도 좋다는(`commit`이 가능한) 상태 109 | - Untracked/Modified 상태인 파일을 `add` 하면 Staged가 됨 110 | 111 | 112 | ### status (st) 113 | - 현재 git 상태를 보여줌. 114 | - Untracked files : `Untracked` 상태인 파일들 115 | - ```bash 116 | cd ~/git-exer 117 | echo "status exer" >> st.md 118 | git st 119 | 120 | --- 121 | 122 | On branch master 123 | Untracked files: 124 | (use "git add ..." to include in what will be committed) 125 | 126 | st.md 127 | 128 | nothing added to commit but untracked files present (use "git add" to track) 129 | ``` 130 | - Changes to be committed: `Staged` 상태인 파일들 131 | - ```bash 132 | git add st.md 133 | git st 134 | 135 | --- 136 | 137 | On branch master 138 | Changes to be committed: 139 | (use "git reset HEAD ..." to unstage) 140 | 141 | new file: st.md 142 | 143 | ``` 144 | - nothing to commit, working tree clean: `Unmodified` 상태인 파일들 145 | - ```bash 146 | git ci -m 'Make st.md' 147 | git st 148 | 149 | --- 150 | 151 | On branch master 152 | nothing to commit, working tree clean 153 | ``` 154 | 155 | ### log (lg) 156 | - 히스토리를 조회하는 명령어 157 | - 커밋 단위로 히스토리가 쌓임 158 | - log를 볼 줄 알아야 develop, release, hotfix 브랜치가 난무할 때 merge 방향이나 순서를 이해할 수 있음 159 | - 위에 있는 것이 최신, 아래 있을 수록 예전 커밋 160 | ```bash 161 | git lg 162 | 163 | --- 164 | 165 | * ab118e1 - (73 minutes ago) Make st.md - Country 166 | * e5d33ad - (2 days ago) initial commit - Country (origin/master) 167 | ``` 168 | 169 | ### add 170 | - 파일을 `Staged` 상태로 만듦 -> 파일을 Git이 관리하는 상태로 만듦 171 | - `Untracked` / `Modified` 상태의 파일에 사용할 수 있음 172 | - 이제 `commit`을 하면 코드를 저장할 수 있음 173 | - `Untracked` 에서 진행 174 | - ```bash 175 | echo "## Git class" >> index.md 176 | git st 177 | 178 | --- 179 | 180 | On branch master 181 | Untracked files: 182 | (use "git add ..." to include in what will be committed) 183 | 184 | index.md 185 | 186 | nothing added to commit but untracked files present (use "git add" to track) 187 | ``` 188 | ```bash 189 | git add index.md 190 | git st 191 | 192 | --- 193 | 194 | On branch master 195 | Changes to be committed: 196 | (use "git reset HEAD ..." to unstage) 197 | 198 | new file: index.md 199 | ``` 200 | - `Modified` 에서 진행 201 | - ```bash 202 | vi st.md 203 | git st 204 | 205 | --- 206 | 207 | Changes not staged for commit: 208 | (use "git add ..." to update what will be committed) 209 | (use "git checkout -- ..." to discard changes in working directory) 210 | 211 | modified: st.md 212 | ``` 213 | ```bash 214 | git add st.md 215 | git st 216 | 217 | --- 218 | 219 | On branch master 220 | Changes to be committed: 221 | (use "git reset HEAD ..." to unstage) 222 | 223 | new file: index.md 224 | modified: st.md 225 | ``` 226 | 227 | ### commit (ci) 228 | - 파일을 `Unmodified` 상태로 만듦 -> 한 단위의 작업이 완료 229 | - Git 시스템에 영구적으로 변경을 저장 230 | - SHA-1 알고리즘을 적용한 해시값을 키로 생성. 231 | - 히스토리가 하나 추가됨 232 | - 실무에서 한 작업 (기능, 피처) 단위로 한 커밋 권장 233 | - ```bash 234 | git ci -m 'Modify files' 235 | 236 | --- 237 | 238 | [master 42298d3] Modify files 239 | 2 files changed, 2 insertions(+) 240 | create mode 100644 index.md 241 | ``` 242 | - ```bash 243 | git st 244 | 245 | --- 246 | 247 | On branch master 248 | nothing to commit, working tree clean 249 | ``` 250 | - ```bash 251 | git lg 252 | 253 | --- 254 | 255 | * 1e928bc - (20 seconds ago) Modify files - Country (HEAD -> master) 256 | * 51462d0 - (4 hours ago) Modify st.md - Country 257 | * ab118e1 - (4 hours ago) Make st.md - Country 258 | * e5d33ad - (2 days ago) initial commit - Country (origin/master) 259 | ``` 260 | #### 옵션 261 | - `-m` : 메시지를 넣음 262 | - `-a` : `add`를 같이 함. 단순히 Modified 263 | - `-am` : `-a`와 `-m`을 합친 것. 제일 많이 사용 264 | - `--amend` 265 | - 마지막 커밋을 수정 266 | - `Stage` 상태의 파일들과 같이 커밋됨 267 | - 만약 `Stage`에 아무것도 없다면 (`commit`이후에 작업을 안했으면) 커밋 메시지만 수정 268 | - ```bash 269 | git lg 270 | 271 | --- 272 | 273 | * 1e928bc - (5 minutes ago) Modify files - Country (HEAD -> master) 274 | * 51462d0 - (4 hours ago) Modify st.md - Country 275 | * ab118e1 - (4 hours ago) Make st.md - Country 276 | * e5d33ad - (2 days ago) initial commit - Country (origin/master) 277 | ``` 278 | - ```bash 279 | git ci --amend 280 | 281 | --- 282 | 283 | [master 69e0e26] Rewrite commit message 284 | Date: Mon Mar 9 23:32:31 2020 +0900 285 | 2 files changed, 2 insertions(+) 286 | create mode 100644 index.md 287 | ``` 288 | - ```bash 289 | git lg 290 | 291 | --- 292 | 293 | * b0c729f - (6 minutes ago) Rewrite commit message - Country (HEAD -> master) 294 | * 51462d0 - (4 hours ago) Modify st.md - Country 295 | * ab118e1 - (4 hours ago) Make st.md - Country 296 | * e5d33ad - (2 days ago) initial commit - Country (origin/master) 297 | ``` 298 | 299 | ### branch (br) 300 | - 커밋 사이를 가볍게 이동할 수 있는 어떤 포인터 같은 것 ([3.1 Git 브랜치 - 브랜치란 무엇인가 301 | ](https://git-scm.com/book/ko/v2/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EB%B8%8C%EB%9E%9C%EC%B9%98%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80)) 302 | - 하나의 작업 공간 단위 정도로 생각 303 | - 브랜치 확인: `git br` 304 | - 브랜치 생성: `git br test/1` 305 | - 브랜치 삭제: `git br -D test/1` 306 | 307 | ### branch 전략 308 | #### Git branch 전략 (Git Flow) 309 | - ![GitFlow](./images/gitflow.png) 310 | - master 311 | - git init하면 생기는 태초의 브랜치 312 | - 배포 가능한, 말그대로 master 브랜치 313 | - 보통 태그를 따서 태그로 배포함 314 | - develop 315 | - 보통 작업할 때 기준이 되는 브랜치. 316 | - 개발 서버에도 평소에는 develop 기준으로 배포하며 테스트 함 317 | - 생성 위치: `master` (태초) 318 | - hotfix 319 | - 서비스에 문제가 생기거나 갑자기 무언가 고쳐서 배포해야 할 때 사용 320 | - 생성 위치: `master` (그렇지 않으면 다른 작업들이 딸려 나감) 321 | - merge: `master` & `develop` 322 | - feature 323 | - 실제로 뭔가 기능(feature)를 만드는 브랜치 324 | - 생성 위치: `develop` 325 | - merge: `develop` (code reivew) 326 | - release 327 | - 새로운 기능들을 추가하여 배포하기 위한 브랜치 328 | - 생성 위치: `develop` 329 | - merge: `master` & `develop` 330 | - 다른 Git branch 전략들도 있음 331 | - GitHub Flow, Release Flow ... 332 | - 참고: https://newsignature.com/articles/git-branching-strategies-which-one-should-i-pick/ 333 | 334 | #### HEAD 335 | - 지금 작업하는 로컬 브랜치를 가리키는 포인터 ([3.1 Git 브랜치 - 브랜치란 무엇인가](https://git-scm.com/book/ko/v2/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EB%B8%8C%EB%9E%9C%EC%B9%98%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80)) 336 | - *현재 브랜치 마지막 커밋의 스냅샷* 337 | - branch를 변경하면 해당 브랜치의 마지막을 가리키고 있음 338 | - HEAD를 움직이면서 여러 버전의 코드들을 볼 수 있음 339 | 340 | ### checkout (co) 341 | - 다른 브랜치로 이동 342 | - 옵션 343 | - `-b` : 브랜치 생성하고 그 브랜치로 checkout 344 | - 아래 두 명령은 같음 345 | - ```bash 346 | git co -b develop 347 | ``` 348 | - ```bash 349 | git br develop 350 | git co develop 351 | ``` 352 | - ```bash 353 | git co master 354 | ``` 355 | 356 | ### checkout TIP 357 | - 커밋의 hash값을 알면 시간 여행이 가능함 358 | - ```bash 359 | git lg 360 | 361 | --- 362 | 363 | * b0c729f - (3 hours ago) Rewrite commit message - Country (HEAD -> master) 364 | * 51462d0 - (6 hours ago) Modify st.md - Country 365 | * ab118e1 - (7 hours ago) Make st.md - Country 366 | * e5d33ad - (2 days ago) initial commit - Country (origin/master) 367 | ``` 368 | - ```bash 369 | git co e5d33ad 370 | 371 | --- 372 | 373 | Note: checking out 'e5d33ad'. 374 | 375 | You are in 'detached HEAD' state. You can look around, make experimental 376 | changes and commit them, and you can discard any commits you make in this 377 | state without impacting any branches by performing another checkout. 378 | 379 | If you want to create a new branch to retain commits you create, you may 380 | do so (now or later) by using -b with the checkout command again. Example: 381 | 382 | git checkout -b 383 | 384 | HEAD is now at e5d33ad initial commit 385 | ``` 386 | - ```bash 387 | git lg 388 | 389 | --- 390 | 391 | * b0c729f - (3 hours ago) Rewrite commit message - Country (master) 392 | * 51462d0 - (6 hours ago) Modify st.md - Country 393 | * ab118e1 - (7 hours ago) Make st.md - Country 394 | * e5d33ad - (2 days ago) initial commit - Country (HEAD, origin/master) 395 | ``` 396 | 397 | ### push 398 | - 로컬 브랜치의 정보를 원격 저장소로 업로드 399 | - Clone 한 리모트 저장소에 쓰기 권한이 있어야 함 400 | - 같은 브랜치로 여러명이 받아서 누군가 push를 했다면 나는 push 안됨 401 | - 다른 사람이 작업한 것을 가져와서 합친 후에 (Merge or Rebase) Push 할 수 있음 402 | - ```bash 403 | git co master 404 | git push [origin] [master] 405 | ``` 406 | - 옵션 407 | - `--force` (`-f`) 408 | - 내 로컬 브랜치로 원격 브랜치를 덮어 씌워버림 409 | - 내가 혼자 작업하던 feature 브랜치에서만 사용해야함 410 | - 시나리오: 누군가 악의적으로 master브랜치를 망가뜨린다면? 411 | 412 | ### pull, fetch 413 | - *Clone 한 서버에서 데이터를 가져오고, 그 데이터를 자동으로 현재 작업하는 코드와 Merge* ([2.5 Git의 기초 - 리모트 저장소 414 | ](https://git-scm.com/book/ko/v2/Git%EC%9D%98-%EA%B8%B0%EC%B4%88-%EB%A6%AC%EB%AA%A8%ED%8A%B8-%EC%A0%80%EC%9E%A5%EC%86%8C)) 415 | - `fetch`: 서버에서 데이터만 가져오고 자동으로 코드를 합치지는 않음 416 | - ```bash 417 | -- 새로운 디렉토리 418 | cd ~ 419 | mkdir git-other 420 | cd git-other 421 | git clone 'https://github.com/HwangNara/git-exer.git' 422 | cd git-exer 423 | vi README.md 424 | git ci -am 'Modify README.md' 425 | git push 426 | ``` 427 | - ```bash 428 | -- 원래 디렉토리 429 | git pull 430 | ``` 431 | 432 | ### pull & push 실습 433 | - 환경: master에서 딴 test 브랜치 / 2개의 터미널 434 | - 내용 435 | 1. fetch vs. pull 436 | 2. pull 충돌 실험 437 | 3. branch 삭제 438 | - 추가 명령어 439 | - 파일 변경 내용 보기: `git diff` 440 | - 리모트의 브랜치 삭제: `git push origin --delete {branch명}` 441 | - 삭제된 리모트 브랜치를 로컬에도 반영: `git fetch -p` 442 | --- 443 | 444 | ## 협업 445 | 446 | ### stash 447 | - 작업 하던 내용을 임시 저장 448 | - 브랜치에서 작업하다가 다른 브랜치로 변경해야 하는데 커밋은 하고 싶지 않은 경우 449 | - stack처럼 작동 450 | - `stash`, `pop`을 많이 사용 451 | - 실습 452 | - ```bash 453 | vi README.md 454 | git stash 455 | git st 456 | git stash list 457 | git stash pop 458 | git st 459 | ``` 460 | - `apply`, `drop` 등의 옵션이 있음 461 | 462 | ### merge 463 | - 협업의 핵심. 다른 브랜치와 현재 브랜치를 합쳐서 코드를 합침 464 | - 방식 465 | - fast-forward 466 | - 커밋들이 공통이고 대상 브랜치의 커밋만 증가 했을 경우 단순히 HEAD만 옮겨짐 467 | - 3-way Merge 468 | - 두 갈래로 나온 변경들을 합쳐서 새로운 커밋을 만듦 469 | - conflict 470 | - squash 471 | - 대상 브랜치의 커밋들을 하나의 커밋으로 합쳐서 merge 472 | - `git merge --squash master` 473 | - 실습 474 | - 상황: 다른 사람이 master에서 같은 파일을 고침 475 | 476 | ### rebase 477 | #### 1. 다른 브랜치와 병합 ([3.6 Git 브랜치 - Rebase 하기](https://git-scm.com/book/ko/v2/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-Rebase-%ED%95%98%EA%B8%B0)) 478 | - 기능은 `merge`와 같음 (코드를 합침) 479 | - 내 브랜치의 커밋을 대상 브랜치의 위(다음)으로 생성함 480 | - 깔끔한 로그를 유지할 수 있음 481 | - 실습 482 | - 상황: master의 변경들을 feature/c에서 rebase 해본다 483 | - 대상 브랜치의 커밋만 진행 (fast-forward) 484 | - 두 브랜치 모두 커밋이 있지만 충돌이 나지 않음 (auto merging) 485 | - 두 브랜치 모두 커밋이 있고 충돌이 남 (conflict) 486 | 487 | 488 | #### 2. 커밋 여러개 수정하기 489 | - 주의 490 | - `push`해서 누군가 사용하고 있는 커밋을 `rebase` 하면 안됨 (헬게이트가 열림) 491 | - 해당 커밋을 기반으로 작업을 했을 텐데 그 기반을 바꿔 버리는 것 492 | - `push`를 했더라도 아직 merge되지 않았고 다른 사람이 사용하지 않는 브랜치라면 (보통 feature 브랜치) 마음대로 `rebase`를 해도 무방 493 | - `-i`: 대화형 모드 494 | - 가장 위에 있는 커밋이 오래된 것 (`git lg`와 반대) 495 | - 옵션 496 | - `--abort` : rebase를 중단. 원래 상태로 돌아감 497 | - `--continue` : rebase를 계속 진행. 다음 단계로 넘어감 498 | - `--skip` : 대상 브랜치의 내용으로 적용 499 | - 커밋 목록에서의 옵션 500 | - `p`, pick = use commit 501 | - `r`, reword = use commit, but edit the commit message 502 | - `e`, edit = use commit, but stop for amending 503 | - `s`, squash = use commit, but meld into previous commit 504 | - `f`, fixup = like "squash", but discard this commit's log message 505 | - `x`, exec = run command (the rest of the line) using shell 506 | - 실습 507 | - 상황: 커밋 하나를 한 뒤, 오타가 있어서 추가 커밋을 함. 그리고 추가 작업까지 한 상태 508 | 509 | ### pull request 실습 510 | - 상황1: conflict 발생하지 않음 511 | - feature/d 브랜치에서 commit & push 512 | - 상황2: conflict 발생 > 로컬에서 해결하고 다시 push 513 | - master 브랜치에서 README 파일 변경 commit & push 514 | - feature/e 브랜치에서 README 파일 변경 commit & push 515 | 516 | 517 | ### reset 518 | - 상태를 이전 커밋으로 reset 시킴 519 | - 옵션에 따라서 몇 커밋 이전 / 어느 단계(`Staged`, `Modified`, `Unmodified`)까지 reset 할지를 결정 520 | - `show`: 커밋 정보를 보여줌 521 | - HEAD == @, ~ == ^ 522 | - ex) HEAD~, HEAD^, @~, @^ : 한 커밋 이전 523 | - @~2: 2커밋 이전 524 | - 옵션 525 | - `--soft` 526 | - `commit` 명령만 되돌림 (`Staged` 상태가 됨) 527 | - HEAD만 해당 커밋으로 돌림 528 | - ```bash 529 | vi README.md 530 | git ci -am 'Commit for reset exer' 531 | git reset --soft @^ 532 | git st 533 | 534 | --- 535 | 536 | On branch develop 537 | Changes to be committed: 538 | (use "git reset HEAD ..." to unstage) 539 | 540 | modified: README.md 541 | ``` 542 | - `--mixed` (기본) 543 | - `commit` 명령도 되돌리고, `add` 명령까지 되돌림 (`Modified` 상태가 됨) 544 | - ```bash 545 | git ci -am 'Commit for reset exer' 546 | git reset --mixed @~1 547 | git st 548 | 549 | --- 550 | 551 | On branch develop 552 | Changes not staged for commit: 553 | (use "git add ..." to update what will be committed) 554 | (use "git checkout -- ..." to discard changes in working directory) 555 | 556 | modified: README.md 557 | ``` 558 | - `--hard` 559 | - `commit` 명령도 되돌리고, `add` 명령도 되돌리고, 워킹 디렉토리까지 되돌림 (`Unmodified` 상태가 됨) 560 | - 워킹 디렉토리까지 되돌려 버리기 때문에 복구가 불가능! 561 | - ```bash 562 | git ci -am 'Commit for reset exer' 563 | git reset --hard @^ 564 | git st 565 | 566 | --- 567 | 568 | On branch develop 569 | nothing to commit, working tree clean 570 | ``` 571 | 572 | ### cherry-pick 573 | - 다른 커밋을 가져옴 574 | - 커밋의 수가 적다면 merge나 rebase보다 간결하고 깔끔한 트리를 유지할 수 있음 575 | ```bash 576 | git co master 577 | git co -b feature/f 578 | vi README.md 579 | git ci -am 'Cherry-pick test' 580 | 581 | git co master 582 | git cherry-pick {{hash}} 583 | 584 | ``` 585 | 586 | ### tag 587 | - 릴리즈를 하기 위한 브랜치 같은 것 588 | - GitHub에서 Release를 만들면서 하면 편함 589 | ```bash 590 | -- 이때까지 작업한 것을 push 591 | git push 592 | ``` 593 | - GitHub 실습 594 | - releases 클릭 595 | - create a new release 596 | - 태그 이름: v1.0.0 597 | - 기준 브랜치: master 598 | - title과 content 작성 599 | -------------------------------------------------------------------------------- /beginner/images/gitflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HwangNara/git-class/9db7b4e39d327bf5acec01aecc38775642cc5ff7/beginner/images/gitflow.png -------------------------------------------------------------------------------- /beginner/images/lifecycle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HwangNara/git-class/9db7b4e39d327bf5acec01aecc38775642cc5ff7/beginner/images/lifecycle.png -------------------------------------------------------------------------------- /image/inflearn_beginner_main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HwangNara/git-class/9db7b4e39d327bf5acec01aecc38775642cc5ff7/image/inflearn_beginner_main.png -------------------------------------------------------------------------------- /utilizer/README.md: -------------------------------------------------------------------------------- 1 | # 실무자가 알려주는 Git - 활용편 --------------------------------------------------------------------------------