{"id":13617172,"url":"https://github.com/flyhigher139/Git-Cheat-Sheet","last_synced_at":"2025-04-14T03:33:07.065Z","repository":{"id":47115750,"uuid":"24309957","full_name":"flyhigher139/Git-Cheat-Sheet","owner":"flyhigher139","description":"Git Cheat Sheet中文版, translated by Gevin (flyhigher139)","archived":false,"fork":true,"pushed_at":"2022-01-06T07:36:15.000Z","size":535,"stargazers_count":1201,"open_issues_count":1,"forks_count":360,"subscribers_count":64,"default_branch":"master","last_synced_at":"2025-01-25T15:33:48.171Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://blog.igevin.info/posts/git-cheat-sheet/","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"arslanbilal/git-cheat-sheet","license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/flyhigher139.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}},"created_at":"2014-09-22T01:28:26.000Z","updated_at":"2025-01-13T22:43:42.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/flyhigher139/Git-Cheat-Sheet","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flyhigher139%2FGit-Cheat-Sheet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flyhigher139%2FGit-Cheat-Sheet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flyhigher139%2FGit-Cheat-Sheet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flyhigher139%2FGit-Cheat-Sheet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flyhigher139","download_url":"https://codeload.github.com/flyhigher139/Git-Cheat-Sheet/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248815761,"owners_count":21165977,"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","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":[],"created_at":"2024-08-01T20:01:37.832Z","updated_at":"2025-04-14T03:33:02.056Z","avatar_url":"https://github.com/flyhigher139.png","language":null,"funding_links":[],"categories":["Git","Others","cheat sheet ##"],"sub_categories":["[@BubuAnabelas/awesome-markdown](/tools/BubuAnabelas-awesome-markdown/)"],"readme":"# Git Cheat Sheet 中文版 [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome)\n\n-----------------\n\n\u003cp align=\"center\"\u003e\n    \u003cimg alt=\"Git\" src=\"./Img/git-logo.png\" height=\"190\" width=\"455\"\u003e\n\u003c/p\u003e\n\n------------------\n\n# Other Available Languages:\n1. [Arabic Git Cheat Sheet](https://github.com/flyhigher139/git-cheat-sheet/blob/master/other-sheets/git-cheat-sheet-ar.md)\n2. [English Git Cheat Sheet](https://github.com/flyhigher139/Git-Cheat-Sheet/blob/master/other-sheets/git-cheat-sheet-en.md)\n3. [Hindi Git Cheat Sheet](https://github.com/flyhigher139/git-cheat-sheet/blob/master/other-sheets/git-cheat-sheet-hi.md)\n4. [Turkish Git Cheat Sheet](https://github.com/flyhigher139/git-cheat-sheet/blob/master/other-sheets/git-cheat-sheet-tr.md)\n5. [Spanish Git Cheat Sheet](https://github.com/flyhigher139/git-cheat-sheet/blob/master/other-sheets/git-cheat-sheet-es.md)\n6. [Nepalese Git Cheat Sheet](https://github.com/Imsatis/Git-Cheat-Sheet/blob/master/other-sheets/git-cheat-sheet-np.md)\n\nGit cheat sheet 让你不用再去记所有的git命令。\n\n欢迎贡献内容、更新语法错误，也欢迎添加你母语版本的Git cheat sheet。\n\n---------------------\n\nGit Cheat Sheet 中文版\n=====================\n\n### 索引\n* [配置](#配置)\n* [配置文件](#配置文件)\n* [创建](#创建)\n* [本地修改](#本地修改)\n* [搜索](#搜索)\n* [提交历史](#提交历史)\n* [分支与标签](#分支与标签)\n* [更新与发布](#更新与发布)\n* [合并与重置](#合并与重置)\n* [撤销](#撤销)\n* [Git Flow](#git-flow)\n\n---\n\n### 配置\n\n##### 列出当前配置：\n```\n$ git config --list\n```\n\n##### 列出repository配置：\n```\n$ git config --local --list\n```\n\n##### 列出全局配置：\n```\n$ git config --global --list\n```\n\n##### 列出系统配置：\n```\n$ git config --system --list\n```\n\n##### 设置用户名：\n```\n$ git config --global user.name “[firstname lastname]”\n```\n\n##### 设置用户邮箱：\n```\n$ git config --global user.email “[valid-email]”\n```\n\n##### 设置git命令输出为彩色：\n```\n$ git config --global color.ui auto\n```\n\n##### 设置git使用的文本编辑器设：\n```\n$ git config --global core.editor vi\n```\n\n---------\n\n### 配置文件\n\n##### Repository配置对应的配置文件路径[--local]：\n```\n\u003crepo\u003e/.git/config\n```\n\n##### 用户全局配置对应的配置文件路径[--global]：\n```\n~/.gitconfig\n```\n\n##### 系统配置对应的配置文件路径[--local]：\n```\n/etc/gitconfig\n```\n\n----------\n\n### 创建\n\n##### 复制一个已创建的仓库:\n\n```bash\n# 通过 SSH\n$ git clone ssh://user@domain.com/repo.git\n\n#通过 HTTP\n$ git clone http://domain.com/user/repo.git\n```\n\n##### 创建一个新的本地仓库:\n```\n$ git init\n```\n\n---\n\n### 本地修改\n\n##### 显示工作路径下已修改的文件：\n```\n$ git status\n```\n\n##### 显示与上次提交版本文件的不同：\n```\n$ git diff\n```\n\n##### 把当前所有修改添加到下次提交中：\n```\n$ git add .\n```\n\n##### 把对某个文件的修改添加到下次提交中：\n```\n$ git add -p \u003cfile\u003e\n```\n\n##### 提交本地的所有修改：\n```\n$ git commit -a\n```\n\n##### 提交之前已标记的变化：\n```\n$ git commit\n```\n\n##### 附加消息提交：\n```\n$ git commit -m 'message here'\n```\n\n##### 提交，并将提交时间设置为之前的某个日期:\n```\ngit commit --date=\"`date --date='n day ago'`\" -am \"Commit Message\"\n```\n\n##### 修改上次提交\n\u003cem\u003e\u003csub\u003e请勿修改已发布的提交记录!\u003c/sub\u003e\u003c/em\u003e\n```\n$ git commit --amend\n```\n\n##### 修改上次提交的committer date：\n```\nGIT_COMMITTER_DATE=\"date\" git commit --amend\n```\n\n##### 修改上次提交的author date：\n```\ngit commit --amend --date=\"date\"\n```\n\n##### 把当前分支中未提交的修改移动到其他分支：\n```\ngit stash\ngit checkout branch2\ngit stash pop\n```\n\n##### 将 stashed changes 应用到当前分支：\n```\ngit stash apply\n```\n\n##### 删除最新一次的 stashed changes：\n```\ngit stash drop\n```\n\n---\n### 搜索\n\n##### 从当前目录的所有文件中查找文本内容：\n```\n$ git grep \"Hello\"\n```\n\n##### 在某一版本中搜索文本：\n```\n$ git grep \"Hello\" v2.5\n```\n\n---\n### 提交历史\n\n##### 从最新提交开始，显示所有的提交记录（显示hash， 作者信息，提交的标题和时间）：\n```\n$ git log\n```\n\n##### 显示所有提交（仅显示提交的hash和message）：\n```\n$ git log --oneline\n```\n\n##### 显示某个用户的所有提交：\n```\n$ git log --author=\"username\"\n```\n\n##### 显示某个文件的所有修改：\n```\n$ git log -p \u003cfile\u003e\n```\n\n##### 仅显示远端\u003cremote/master\u003e分支与远端\u003corigin/master\u003e分支提交记录的差集：\n```\n$ git log --oneline \u003corigin/master\u003e..\u003cremote/master\u003e --left-right\n```\n\n##### 谁，在什么时间，修改了文件的什么内容：\n```\n$ git blame \u003cfile\u003e\n```\n\n##### 显示reflog：\n```\n$ git reflog show \n```\n\n##### 删除reflog：\n```\n$ git reflog delete\n```\n\n---\n### 分支与标签\n\n##### 列出所有的分支：\n```\n$ git branch\n```\n\n##### 列出所有的远端分支：\n```\n$ git branch -r\n```\n\n##### 切换分支：\n```\n$ git checkout \u003cbranch\u003e\n```\n\n##### 创建并切换到新分支:\n```\n$ git checkout -b \u003cbranch\u003e\n```\n\n##### 基于当前分支创建新分支：\n```\n$ git branch \u003cnew-branch\u003e\n```\n\n##### 基于远程分支创建新的可追溯的分支：\n```\n$ git branch --track \u003cnew-branch\u003e \u003cremote-branch\u003e\n```\n\n##### 删除本地分支:\n```\n$ git branch -d \u003cbranch\u003e\n```\n\n##### 强制删除一个本地分支：\u003cbr\u003e\n\u003cem\u003e\u003csub\u003e将会丢失未合并的修改！\u003c/sub\u003e\u003c/em\u003e\n\n```\n$ git branch -D \u003cbranch\u003e\n```\n\n\n##### 给当前版本打标签：\n```\n$ git tag \u003ctag-name\u003e\n```\n\n##### 给当前版本打标签并附加消息：\n```\n$ git tag -a \u003ctag-name\u003e\n```\n\n---\n### 更新与发布\n\n##### 列出当前配置的远程端：\n```\n$ git remote -v\n```\n\n##### 显示远程端的信息：\n```\n$ git remote show \u003cremote\u003e\n```\n\n##### 添加新的远程端：\n```\n$ git remote add \u003cremote\u003e \u003curl\u003e\n```\n\n##### 下载远程端版本，但不合并到HEAD中：\n```\n$ git fetch \u003cremote\u003e\n```\n\n##### 下载远程端版本，并自动与HEAD版本合并：\n```\n$ git remote pull \u003cremote\u003e \u003curl\u003e\n```\n\n##### 将远程端版本合并到本地版本中：\n```\n$ git pull origin master\n```\n\n##### 以rebase方式将远端分支与本地合并：\n```\ngit pull --rebase \u003cremote\u003e \u003cbranch\u003e\n```\n\n##### 将本地版本发布到远程端：\n```\n$ git push \u003cremote\u003e \u003cbranch\u003e\n```\n\n##### 删除远程端分支：\n```\n$ git push \u003cremote\u003e :\u003cbranch\u003e (since Git v1.5.0)\nor\ngit push \u003cremote\u003e --delete \u003cbranch\u003e (since Git v1.7.0)\n```\n\n##### 发布标签:\n```\n$ git push --tags\n```\n\n---\n### 合并与重置(Rebase)\n\n##### 将分支合并到当前HEAD中：\n```\n$ git merge \u003cbranch\u003e\n```\n\n##### 将当前HEAD版本重置到分支中:\n\u003cem\u003e\u003csub\u003e请勿重置已发布的提交!\u003c/sub\u003e\u003c/em\u003e\n```\n$ git rebase \u003cbranch\u003e\n```\n\n##### 退出重置:\n```\n$ git rebase --abort\n```\n\n##### 解决冲突后继续重置：\n```\n$ git rebase --continue\n```\n\n##### 使用配置好的merge tool 解决冲突：\n```\n$ git mergetool\n```\n\n##### 在编辑器中手动解决冲突后，标记文件为`已解决冲突`：\n```\n$ git add \u003cresolved-file\u003e\n```\n\n```\n$ git rm \u003cresolved-file\u003e\n```\n\n##### 合并提交：\n```\n$ git rebase -i \u003ccommit-just-before-first\u003e\n```\n\n把上面的内容替换为下面的内容：\n\n原内容：\n```\npick \u003ccommit_id\u003e\npick \u003ccommit_id2\u003e\npick \u003ccommit_id3\u003e\n```\n\n替换为：\n```\npick \u003ccommit_id\u003e\nsquash \u003ccommit_id2\u003e\nsquash \u003ccommit_id3\u003e\n```\n\n---\n### 撤销\n\n##### 放弃工作目录下的所有修改：\n```\n$ git reset --hard HEAD\n```\n\n##### 移除缓存区的所有文件（i.e. 撤销上次`git add`）:\n```\n$ git reset HEAD\n```\n\n##### 放弃某个文件的所有本地修改：\n```\n$ git checkout HEAD \u003cfile\u003e\n```\n\n##### 重置一个提交（通过创建一个截然不同的新提交）\n```\n$ git revert \u003ccommit\u003e\n```\n\n##### 将HEAD重置到指定的版本，并抛弃该版本之后的所有修改：\n```\n$ git reset --hard \u003ccommit\u003e\n```\n\n##### 用远端分支强制覆盖本地分支：\n```\ngit reset --hard \u003cremote/branch\u003e e.g., upstream/master, origin/my-feature\n```\n\n##### 将HEAD重置到上一次提交的版本，并将之后的修改标记为未添加到缓存区的修改：\n```\n$ git reset \u003ccommit\u003e\n```\n\n##### 将HEAD重置到上一次提交的版本，并保留未提交的本地修改：\n```\n$ git reset --keep \u003ccommit\u003e\n```\n\n##### 删除添加`.gitignore`文件前错误提交的文件：\n```\n$ git rm -r --cached .\n$ git add .\n$ git commit -m \"remove xyz file\"\n```\n\n---\n\n## Git-Flow\n\n### 索引\n* [安装](#安装)\n* [开始](#开始)\n* [特性](#特性)\n* [做一个release版本](#做一个release版本)\n* [紧急修复](#紧急修复)\n* [Commands](#commands)\n\n---\n\n### 安装\n\n- 你需要有一个可以工作的 git 作为前提。\n- Git flow 可以工作在 OSX, Linux 和 Windows之下\n\n##### OSX Homebrew:\n\n```\n$ brew install git-flow\n```\n\n##### OSX Macports:\n\n```\n$ port install git-flow\n```\n\n##### Linux:\n\n```\n$ apt-get install git-flow\n```\n\n##### Windows (Cygwin):\n\n安装 git-flow, 你需要 wget 和 util-linux。\n\n```\n$ wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash\n```\n\n----\n\n\n### 开始\n\n- 为了自定义你的项目，Git flow 需要初始化过程。\n- 使用 git-flow，从初始化一个现有的 git 库内开始。\n- 初始化，你必须回答几个关于分支的命名约定的问题。建议使用默认值。\n\n```\ngit flow init\n```\n\n---\n\n\n### 特性\n\n- 为即将发布的版本开发新功能特性。\n- 这通常只存在开发者的库中。\n\n##### 创建一个新特性:\n\n下面操作创建了一个新的feature分支，并切换到该分支\n\n```\ngit flow feature start MYFEATURE\n```\n\n##### 完成新特性的开发:\n\n完成开发新特性。这个动作执行下面的操作：\n1. 合并 MYFEATURE 分支到 'develop'\n2. 删除这个新特性分支\n3. 切换回 'develop' 分支\n\n```\ngit flow feature finish MYFEATURE\n```\n\n##### 发布新特性:\n\n你是否合作开发一项新特性？\n发布新特性分支到远程服务器，所以，其它用户也可以使用这分支。\n\n```\ngit flow feature publish MYFEATURE\n```\n\n##### 取得一个发布的新特性分支:\n\n取得其它用户发布的新特性分支。\n\n```\ngit flow feature pull origin MYFEATURE\n```\n\n##### 追溯远端上的特性:\n\n通过下面命令追溯远端上的特性\n\n```\ngit flow feature track MYFEATURE\n```\n\n---\n\n\n### 做一个release版本\n\n- 支持一个新的用于生产环境的发布版本。\n- 允许修正小问题，并为发布版本准备元数据。\n\n##### 开始创建release版本:\n\n- 开始创建release版本，使用 git flow release 命令。 \n- 'release' 分支的创建基于 'develop' 分支。 \n- 你可以选择提供一个 [BASE]参数，即提交记录的 sha-1 hash 值，来开启动 release 分支。\n- 这个提交记录的 sha-1 hash 值必须是'develop' 分支下的。 \n\n```\ngit flow release start RELEASE [BASE]\n```\n\n创建 release 分支之后立即发布允许其它用户向这个 release 分支提交内容是个明智的做法。命令十分类似发布新特性：\n\n```\ngit flow release publish RELEASE\n```\n\n(你可以通过 \n`git flow release track RELEASE` 命令追溯远端的 release 版本)\n\n##### 完成 release 版本:\n\n完成 release 版本是一个大 git 分支操作。它执行下面几个动作：\n1. 归并 release 分支到 'master' 分支。\n2. 用 release 分支名打 Tag\n3. 归并 release 分支到 'develop'\n4. 移除 release 分支。\n\n\n```\ngit flow release finish RELEASE\n```\n\n不要忘记使用`git push --tags`将tags推送到远端\n\n---\n\n\n### 紧急修复\n\n紧急修复来自这样的需求：生产环境的版本处于一个不预期状态，需要立即修正。有可能是需要修正 master 分支上某个 TAG 标记的生产版本。\n\n##### 开始 git flow 紧急修复:\n\n像其它 git flow 命令一样, 紧急修复分支开始自：\n\n```\n$ git flow hotfix start VERSION [BASENAME]\n```\n\n\nVERSION 参数标记着修正版本。你可以从 `[BASENAME]开始，`[BASENAME]`为finish release时填写的版本号\n\n##### 完成紧急修复:\n\n当完成紧急修复分支，代码归并回 develop 和 master 分支。相应地，master 分支打上修正版本的 TAG。\n\n```\ngit flow hotfix finish VERSION\n```\n\n---\n\n\n### Commands\n\u003cp align=\"center\"\u003e\n    \u003cimg alt=\"Git\" src=\"./Img/git-flow-commands.png\" height=\"270\" width=\"460\"\u003e\n\u003c/p\u003e\n\u003chr\u003e\n\n### Git flow schema\n\n\u003cp align=\"center\"\u003e\n    \u003cimg alt=\"Git\" src=\"Img/git-flow-commands-without-flow.png\"\u003e\n\u003c/p\u003e\n\u003chr\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflyhigher139%2FGit-Cheat-Sheet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflyhigher139%2FGit-Cheat-Sheet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflyhigher139%2FGit-Cheat-Sheet/lists"}