{"id":19939215,"url":"https://github.com/sunyoungkwon/study-git","last_synced_at":"2025-10-12T20:20:53.968Z","repository":{"id":116300943,"uuid":"162926585","full_name":"SunYoungKwon/Study-Git","owner":"SunYoungKwon","description":":octocat: Git 많이 사용하는 명령어 정리","archived":false,"fork":false,"pushed_at":"2021-10-09T13:34:52.000Z","size":43,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-06-08T09:05:53.017Z","etag":null,"topics":["git"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SunYoungKwon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-12-23T21:56:12.000Z","updated_at":"2021-10-09T13:34:54.000Z","dependencies_parsed_at":null,"dependency_job_id":"0a82d4a8-59dc-425d-912f-01edeb514310","html_url":"https://github.com/SunYoungKwon/Study-Git","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/SunYoungKwon/Study-Git","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SunYoungKwon%2FStudy-Git","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SunYoungKwon%2FStudy-Git/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SunYoungKwon%2FStudy-Git/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SunYoungKwon%2FStudy-Git/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SunYoungKwon","download_url":"https://codeload.github.com/SunYoungKwon/Study-Git/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SunYoungKwon%2FStudy-Git/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279012806,"owners_count":26085187,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-12T02:00:06.719Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["git"],"created_at":"2024-11-12T23:45:31.729Z","updated_at":"2025-10-12T20:20:53.962Z","avatar_url":"https://github.com/SunYoungKwon.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Study Git\n\n## config\n### 초기설정\n```\ngit config --global user.name 'name'          // --global로 설정된 값은 처음 한 번만 설정\ngit config --global user.email 'gthub email'  // 매번 다른 이름과 메일주소를 사용할 것이라면 --global 안써도 됨\n```\n\n### 설정확인 / 삭제\n```\ngit config --list     // 현재 git 설정을 출력\n\ngit config --unset user.name              // 설정된 user.name 삭제\ngit config --unset --global user.email    // --global로 설정된 user.email 삭제\n```\n\u003cbr /\u003e\n\n## 저장소 생성\n### 저장소 생성\n```\n// 먼저 저장소를 만들 위치로 이동\ngit init\ngit init --bare 저장소이름   // 수정없이 저장만 할 저장소 생성\n```\n\n### remote저장소 생성\n```\ngit remote add origin '저장소주소'              // 해당 주소로 연결되는 origin이라는 이름의 remote저장소 생성\ngit remote                                     // 현재 프로젝트에 등록된 remote저장소 목록을 보여줌\ngit remote -v                                  // remote저장소 목록을 ULR과 함께 보여줌\ngit remote set-url 저장소이름 새로운저장소주소   // remote저장소의 url주소 \n```\n\u003cbr /\u003e\n\n## status\n### 현재 파일들의 상태 출력\n```\ngit status\n```\n- Untracked file: add되기 전. git의 추적을 받지 않는 파일\n\n- modified: 수정된 것\n  + Changes to be commited: commit될 것\n  + Changes not staged for commit: commit되지 않을 것\n\u003cbr /\u003e\n\n## log\n```\ngit log                               // 현재까지 commit한 내용 출력\ngit log -p                            // 각 commit사이의 소스코드상의 변경사항을 함께 출력\ngit log diff commitID1..commitID2     // commitID1과 commitID2사이의 변경사항 출력\ngit log --branch                      // 모든 브랜치를 표현\ngit log --graph                       // 그래프로 표현 \ngit log -1                            // 최근 1개의 log만 표시\n```\n\u003cbr /\u003e\n\n## diff\n```\ngit diff    // modified 상태가 되며 수정된 요소가 무엇인지 출력\n```\n\u003cbr /\u003e\n\n## add\n### 파일을 add하기\n```\ngit add 'File'\ngit add *        // 모든 파일을 add\ngit add -u       // modified \u0026 deleted 파일만 add\n```\n\n### add 취소하기\n```\ngit reset           // 모든 파일의 add를 취소\ngit reset 'File'    // 해당 파일을 unstaged상태로 변경\n\ngit clean -fdx      // 모든 untracked파일 삭제\n```\n\u003cbr /\u003e\n\n## rm\n```\ngit rm 'File'           // 파일을 삭제 후 staged상태로 변경(work directory의 파일도 삭제)\ngit rm --cached 'File'  // 파일을 untracked상태로 변경(work directory의 파일은 그대로 유지)\n```\n\u003cbr /\u003e\n\n## commit\n[좋은 커밋 메세지 작성법](https://meetup.toast.com/posts/106)\n### commit하기\n```\ngit commit\ngit commit -a                    // modified \u0026 deleted 파일을 자동으로 add하고 commit\ngit commit -m 'commit message'   // 에디터를 거치지않고 바로 commit메세지 작성\n```\n\n### commit 취소 하기\n```\ngit reset 버전아이디 --hard   // 작성한 commit아이디 상태로 돌아가고 그 이후의 버전은 버림\ngit reset --hard HEAD^       // 마지막 커밋 바로 이전으로 돌아가고 마지막 커밋은 버림\ngit reset HEAD^              // 마지막 커밋을 취소하고 내용은 남김채 unstaged 상태로 만들기\ngit reset --soft HEAD^       // 마지막 커밋을 취소하고 내용은 남김채 staged 상태로 만들기\n\ngit revert 버전아이디         // 버전아이디 커밋을 취소한 내용을 새로운 버전으로 만듦\n* 반드시 push전에 할 것\n```\n\n### 마지막 commit 수정하기\n```\ngit commit --amend      // 편집기에서 새로운 커밋메세지 작성 후 반영\n                        // 파일 수정 후 add하여 실행할 시 해당 파일의 수정사항을 마지막 커밋에 추가\ngit commit --amend --no-edit    // 커밋 메세지 수정없이 커밋 내용 반영\ngit commit --amend -m '새로운 메세지'   // 바로 직전의 commit 메세지를 변경\n\ngit push -f // 수정 한 메세지 push하기\n\n* 다른 사람과 협업중인 공간에 push한 후 commit 수정은 권장하지 않음(충돌 위험 매우 큼)\n```\n\u003cbr /\u003e\n\n## checkout\n### 브랜치 이동\n```\ngit checkout HEAD~1             // 현재 위치에서 1단계 전 commit으로 돌아가기\ngit checkout 'name of branch'   // 해당 브랜치로 이동\n```\n\n### modified전 상태로 되돌리기\n```\ngit checkout .            // (위치: repository_root_dir) 프로젝트 내 모든 파일을 modified되기 전 상태로 되돌리기\ngit checkout 'dir'        // 해당 폴대 내 모든 파일을 modified되기 전 상태로 되돌리기\ngit checkout -- 'file'    // 해당 파일이 modified되기 전 상태로 되돌리기\n```\n\u003cbr /\u003e\n\n## push\n### Github에 작업물 push\n1. Github에 repository생성\n2. 작업 후 commit\n3. Github에 생성한 ropository주소로 remote저장소 생성\n```\ngit remote add origin 'repository주소'\ngit remote      // 확인\n```\n4. 작업물 push\n```\ngit push -u origin master     // local저장소의 브랜치와 원격저장소의 master브랜치 연결\n                              // 다음부터 git push만 하면 됨\n```\n\u003cbr /\u003e\n\n## pull\n```\ngit pull    // update내용을 local로 가져오기\n```\n\u003cbr /\u003e\n\n## stash\n```\ngit stash         // 새로운 stash 생성\ngit stash save    // 새로운 stash 생성\ngit stash list    // stash 목록 확인하기\n\ngit stash apply                 // stash 적용하기\ngit stash apply --index         // Staged상태로 stash 적용하기\ngit stash apply 'stash name'    // stash 적용하기\n\ngit stash drop                  // 가장 최근의 stash \ngit stash drop 'stash name'     // 해당 stash 제거\n\ngit stash show -p | git apply -R                // stash 되돌리기\ngit stash show -p 'stash name'| git apply -R    // 해당 stash 되돌리기\n```\n\u003cbr /\u003e\n\n## branch\n```\ngit branch      // 현재 브랜치목록을 보여줌\ngit branch -r   // 원격 저장소의 브랜치목록을 보여줌\ngit branch -a   // 로컬, 원격 저장소의 브랜치 목록을 보여줌\n```\n  \n### branch 생성, 전환, 삭제\n```\ngit branch nameOfBranch\ngit checkout master            // master브랜치로 이동\ngit branch -d nameOfBranch     // 현재 위치가 삭제할 브랜치여서는 안됨\ngit branch -D nameOfBranch     // 병합하지 않은 브랜치를 강제 삭제\ngit push origin --delete nameOfbranch   // 리모트 저장소의 브랜치 삭제\n\ngit checkout -b nameOfBranch   // 새로운 브랜치를 생성하고 생성 브랜치로 전환\ngit branch -m oldName newName  // local에서 브랜치 이름 변경\n```\n\n### cherry-pick\n- 다른 branch에 있는 commit을 선별적으로 현재 branch에 반영\n- 가져올 commit과 같은 commit을 만들어 현재 branch에 덧붙임\n```\ngit cherry-pick commitID\ngit cherry-pick startCommitID..endCommitID    // 연속된 여러 커밋 가져오기(startCommitID에 해당하는 커밋은 미포함)\ngit cherry-pick startCommitID^..endCommitID   // 연속된 여러 커밋 가져오기(startCommitID에 해당하는 커밋 포함)\n```\n\n### merge branch\n- commit ID가 보존됨\n```\ngit checkout branch1          // branch1으로 이동\ngit merge branch2             // branch2를 branch1(현재 위치한 브랜치)에 merge\n\ngit merge --no-ff branch2     // 3-Way Merge 수행\n\ngit merge --squash branch2    // branch2의 커밋을 하나로 합쳐서 merge\n                              // 이후 Staging Area에 올라온 파일을 커밋해줘야 함\n```\n\n### rebase branch\n- 여러개의 commit을 다룰 수 있음\n- 새로운 commit이 생성되므로 commit ID가 변경됨\n```\ngit rebase nameOfBranch   // 현재 branch와 대상 branch의 공통 조상부터 대상 branch의 최신 커밋까지\n                          // 순서대로 하나씩 가져와 현재 branch에 붙임\n                          \ngit rebase -i HEAD~3      // 현재 branch의 HEAD로 부터 3개의 commit을 편집\n```\n\n### branch 충돌 해결\n1. CONFLICT 에러 발생\n2. git status로 충돌이 일어난 파일 확인\n3. 충돌이 일어난 파일 수정\n```\n\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD     // 현재 브랜치\n내용1\n=======\n내용2\n\u003e\u003e\u003e\u003e\u003e\u003e\u003e branch   // merge하려던 브랜치\n```\n4. git add '충돌파일명'\n  \n### 원격 저장소의 branch 로컬로 가져오기\n```\ngit branch -r                    // 원격저장소의 브랜치목록 보기\n  \u003e origin/branch1               // '저장소명'/'브랜치명'\ngit checkout -t origin/branch1   // 로컬에 'branch1'를 만들고 이동\n\ngit checkout -b 'new-branch-name' 'origin/branch1'    // 새로운 이름으로 브랜치 가져오기\n```\n\u003cbr /\u003e\n\n## etc\n```\npwd                // 현재 나의 위치\nmkdir 폴더명        // 현재 위치에 새로운 폴더 생성\ncp file1 file2     // file1과 같은 내용의 fil12를 생성(확장자 쓰기)\ngit                // 사용할 수 있는 명령어 표시\nls -al             // 현재 디렉토리의 파일 목록 출력\ncat 파일명.확장자   // 선택한 파일의 내용을 출력\n명령어 --help      // 해당 명령어에 대한 메뉴얼을 보여줌\n```\n\u003cbr /\u003e\n\n---\n\n## Fork한 repository 최신으로 동기화\n1. 원본 repository를 remote저장소로 추가\n```\ngit remote add upstream '원본 저장소 주소'\ngit remote -v      // 확인\n```\n2. upstream으로부터 최신 업데이트 가져오기\n```\ngit fetch upstream\n```\n3. upstream의 master branch로부터 나의 local master branch로 merge\n```\ngit checkout master          // local master branch로 이동\ngit merge upstream/master\n```\n4. push하여 origin remote repository에 적용\n```\ngit push origin master\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunyoungkwon%2Fstudy-git","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsunyoungkwon%2Fstudy-git","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunyoungkwon%2Fstudy-git/lists"}