git常用指令一览表
GIT指令 | 说明 |
git add . | 将全部文件的内容加到Git索引以便执行commit. 这个指令不会检查文件夹中是否有文件被删除。 要注意的是,只有执行“ git add”时的文件内容会被加入Git 索引。如果后来又修改了文件, 新的文件内容不会在Git索引中。我们必须重新执行“ git add ”指令,才会更新Git索引。 |
git add 文件名 文件名 … | 将指定的文件的内容加到Git 索引,以便执行commit 操作。要注意的是, 只有执行“ git add”时,文件内容才会被加入Git 索引。如果后来又修改了文件, 新的文件内容不会在Git 索引中。我们必须重新执行“ git add ”指令,才会更新Git 索引。 |
git add -A | 除了把全部文件的内容加到Git 索引以外,也会检查文件夹中是否有文件被删除。这些 被删除的文件会标记在Git 索引中,当执行commit 指令的时候,被标记删除的文件也会 从新的commit 节点中被删除。我们可以从Git 丈档库的历史版本中找回被删除的文件。 |
git add –update 或是 git add -u |
对比当前文件夹中的文件内容和Git 文档库中的文件内容,把有修改的部分和删除的文 或是件加到Git 索引,以便执行commit 。这个指令不会增加新的文件到Git 索引,只会更新 或是删除文件。 |
git blame 文件名 或者 git blame -L 起始行,结束行文件名 或者 git blame -L 起始行,文件名 或者 git blame -L 结束行,文件名 |
显示文件的每一行是由谁修改。可以搭配“-L”选项,指定要从哪一行开始到哪一行 或是结束。如果没有指定起始行,表示是从文件的第一行开始。如果没有指定结束行, 表示要到文件的最后一行。 |
git branch 自己取的分支名称 [commit 节点标识符或是标签] |
按照参数的多少,会有不同的功能: 1. 如果最后指定了commit 节点标识符或是标签,就会从该节点“长”出分支;如果没 有指定commit 节点,就会从最新的commit“长”出分支; 2 “ git branch”指令后面没有接任何参数时,会列出当前文档库中正在开发的所有分支。 |
git branch 新分支的名称己经存在的分支 | 从特定的分支,再长出另一个新的分支。 |
git branch -a | 列出丈档库和远程文档库中所有的分支。 |
git branch -d 要删除的分支名称 | 删除指定的分支。必须先切换到另一个分支,才能执行这个指令。 |
git branch -D 要删除的分支名称 | 在一般情况下,分支应该先合并到另一个分支,之后才能够被删除。如果我们要删除还 没有合并的分支, Git 会显示错误信息,并且停止删除分支的操作。如果确定要删除还 没有合并的分支,可以使用“-D ”选项,要求Git 强制执行删除分支的操作。 |
git branch –list 分支名称样板 | 显示符合“分支名称样板”的所有分支,例如以下指令范例会显示所有以“ bug/”开头 的分支:git branch –list bug/* |
git branch -m 新的分支名称 | 更改分支的名称。必须先切换到该分支,才能够执行这个指令。 |
git checkout 文件1 文件2 … 或是 git checkout . |
Git 会先找索引中有没有该文件,如果有就把它取出:如果没有,就从最新的commit 节点开始,按照时间顺序往前寻找,然后取出第一个找到的文件版本,每一个文件都用 同样的方式处理。如果要取出文档库中全部文件的最新版本,可以执行“ git checkout .”’ |
git checkout commit 节点标识符或标签[文件1 文件2..] | 从Git 文档库的commit 节点取出指定的文件。如果取出的文件和当前文档库中最新 commit 的文件内容不同,这个取出的文件内容会自动记录在Git 索引中。下次执行”git commit” 指令时,这个取出的文件内容就会存入文档库中成为新的版本。如果要避免这 种情况发生,可以在执行“git checkout”指令之后,立刻执行“ git reset HEAD ”来清除 Git 索引。 |
git checkout 分支名称 | 将当前操作的分支切换到指定的分支。 |
git checkout -f 分支名称 | 在切换分支的时候, Git 会先对比丈档库中当前分支的文件内容是否和将要切换过去的 分支的文件内容相同。针对内容不一样的文件, Git 需要从文档库中取出该文件,这是 为了让文件夹中的文件符合分支原来的状态。但是为了避免数据遗失,当Git 要覆盖 文件夹中的文件时,会检查该文件的内容是否已经加入文档库。如果还没有加入, Git 会显示警告信息,并且停止执行,以免资料遗失。如果我们确定不想保留这些已经修改 却还没有加入文档库的文件,可以加入“-f”选项,这样Git 就会强制覆盖修改后的文件。 |
git checkout -b 新分支的名称[commit 节点标识符或是标签] | 创建指定的分支,然后切换到新创建的分支。这个指令等同于先执行“ git branch 新分支的 名称commit 节点标识符或是标签” , 接着再执行“ git checkout 新分支的名称”。如果最 后指定了commit 节点标识符或是标签,就会从该节点“长”出分支。如果没有指定commit 节点,就会从最新的commit “ 长”出分支。 |
git cherry-pick -n commit 节点标识或标签 | 把指定的commit节点的文件版本合并到文件夹中的文件。在默认情况下 ,执行这个指令会创建一个新的commit 节点。如果不想要创建新节 或标签点, 则可以加上”-n”选项。执行这个指令之前, 文件夹中被修改的文件必须先存入Git 文档库,否则会出现警告信息,并且停止执行。 |
git clone “远程Git 文档库”的路径 | 从“远程Git 文档库”复制一个“本地Git或是文档库”到我们的计算机。 第一种方式适用的情况是“远程Git 文档库”在我们自己的计算机上。 |
git clone –bare[程序项目文件夹名称][“远程Git文档库”的路径] | 从“本地Git 文档库”复制出Bare 类型的“远程Git 文档库” 我们通常会帮Bare类型的文档库加上扩展名”.git”,例如game.git。 |
git commit -m ‘这次操作的说明’ [–author=‘操作者姓名 [email 邮箱]’] | 把当前Git 索引的内容送进文档库存储。每一次执行commit 一定要附加说明和操作者 信息。如果没有使用“-m ” 选项, Git 会启动文字编辑程序让我们输入操作说明。默认 的文字编辑程序是vi ,我们可以使用“ git config ”指令设置其他的文字编辑程序,详 细操作方式请参考第2 单元的说明。除了使用“–author”选项输入操作者信息以 外,也可以把操作者的信息记录在Git 配置文件中, 这样就不用加上“–author” 选项. |
git commit -a -m ‘这次操作的说明’[–author=‘操作者姓名[email 邮箱]’] 或是 git commit –all -m ‘这次操作的说明’[–author=‘操作者姓名[email 邮箱]’] | 这个指令的效果等同于先执行“git add -u”再执行“ git commit -m ‘这次操作的说明’ –author=‘操作者姓名[email 邮箱]’”。首先对比当前文件夹中的文件内容和Git 文 档库中的文件内容,把有修改的部分和删除的文件加到Git 索引,然后执行commit。这 个指令不会把新的文件加到Git 文档库。 |
git commit –amend -m ‘新的操作说明’–author=‘操作者姓名[email 邮箱]’) | 修改最近一次commit 节点的操作说明,或是操作者信息 |
git config -l 或者 git config –global -l 或者 git config –system -l | 只有使用“ -l”选项时会显示三个不同层级的配置文件中所有的设置项。低优先权配置
文件的设置项会先显示,最高优先权配置文件的设置项显示在最后。 加入“–global ” 选顶时会显示优先权配置文件中的设置项,也就是登录账号的home 或是directory 里面的.gitconfig 文件中的设置。 加入“–system ”选项时会报示最低优先权配置文件中的设置顶,也就是Git程序安装文 件夹里面的etcgitconfig 文件夹的设置。 |
git config 设置项名称‘设置值’ 或者 git config –global 设置项名称‘设置值’ 或者 git config –system 设置项名称‘设置值‘ |
在Git 配置文件中加入或是修改设置。如果“设置值”中没有空格,可以省略单引号。 如果没有使用任何选项,表示要将设置项写到当前操作中的Git文档库中的配置文件。 如果加入“–global ”选项,表示要将设置项写到登录账号的home directory 里面 的.gitconfig 配置文件中.如果加入“–system”选项,表示要将设置项 写到Git 程序安装文件夹里面的etcgitconfig配置文件中。 |
Git diff 文件名 | 判断该文件是否发成冲突或者解决冲突是否成功 |
Git fetch 或者 git fetch –all | 从“远程Git 文档库”取回当前所在分支的最新数据。完成这项工作之后,我们计算机 上的“远程Git 文档库”的当前分支状态就和实际的情况一致。如果想要一次获取全部 分支最新的数据,可以加上“-all ”选项。 |
Git init | 在当前的文件夹创建一个Git 文档库。如果这个文件夹己经有Git 文档库,这个指令就 不会再重新创建,也不会修改其中的内容。Git 文档库其实是名称叫作“ .git ”的子文件 夹,默认它会被隐藏起来,我们可以改变文件夹的查看选项让它显示出来。如果删除这 个子文件夹, Git 文档库的内容就会全部消失。 |
Git init -bare Git 文档库文件夹名称 | 创建Bare 类型的Git 文档库。我们通常会帮Bare 类型的Git 文档库加上扩展名“ .git ”, 例如game.git 。 |
git log | 按照时间顺序,从最近一次的commit 开始,往前列出每一次commit 的信息,包括标识 符、执行人、日期利时间以及说明。 |
Git log -after=’公元年-月-日 时间’[–before=’公元年-月-日 时间’] | 指定要显示某一段时间期间的commit 的信息。“ after"可以换成“-since ”,“–before ” 可以换成“-until”。 |
Git log -author=‘人名’ | 只显示特定人的commit 节点信息。 |
git log –graph –online –all –decorate | 加上“–graph ” 选项会用文本模式排列出commit 节点的演进图 .加上’–oneline ”选 项会用最精简的方式显示. 加上“ –all ”选项会显示所有分支的commit信息。 加上“–decorate ” 选项表示要标示分支的名称。 |
git log –stat 或者 git log –shortstat 或者 git log –numstat |
显示每一个commit 更改程序代码和文件的情况,包括有多少文件被修改了、 增加了几行程序代码和删除了几行程序代码。 |
git ls-file | 列出当前Git 文档库中的文件列表。 |
git ls-remote | 列出“本地Git 文档库”对应的所有“远程Git 文档库” |
git merge 分支名称 | 把指定的分支合并到当前所在的分支。 |
git merge –abort | 合并的过程发生冲突之后,执行这个指令可以放弃合并。Git 文档库和文件夫中的文件 内容都会恢复到未执行合并前的状态。 |
git merge –no-ff 分支名称 | “–no-ff”逃项表示不要使用fast-forward merge 。 |
git mv 原来的文件名 新文件名 | 更改文件夹巾的文件名,或是子文件夹名称,然后把它记录在Git 索引。接着只要执行 “git commit”指令,就可以将更改存入文档库。 |
git pull 或者 git pull -all |
“git pull”指令会执行两项工作: 1. 从“远程Git 文档库”取回当前所在分支的最新数据。完成这项工作之后,计算机 上的“远程Git 文档库”的当前分支状态就和实际的情况一致。如果想要一次获取全部 分支最新的数据,可以加上“–all ”选项。 2. 把“远程Git 文档库”的分支合并到“本 地Git 文档库”的分支。 |
git pull –rebase 或者 git pull -r |
把“ git pull "指令的第二个步骤换成“ git rebase” (原来是“ git merge” )。 |
git push | 执行这个指令时,屏幕画面会显示一段信息,提示我们需要在Git 的配置文件中如入
push.default 的设置。我们可以执行下列指令,指定push.default 为matching:
git config –global push.default matching 这样的话,如果只下达”git push”指令,后面没有加上任何参数, Git 会 把“本地Git文档库”中所有曾经传送给“远程Git 文档库”的分支,都一并更新. 或者,可以执行下列指令,指定push.default 为simple: git config –global push.default simple 这样的话,如果只下达“ git push ”指令,后面没有加上任何参数。Git 会检查当前所在 的分支是否在配置文件中记录了它对应的“远程Git 文档库”的分支。如果有,就会 传送更新给“远程Git 文档库”。否则,就不会执行更新。和matching 的设置相比之下, simple 是比较安全的做法。因为它只会更新当前所在的分支,不会一次更新全部的分支。 |
git push origin 分支名称 | 把指定分支的最新状态送到origin 属性所对应的“远程Git 文档库”。执行这个指令不 会在配置文件中记录“本地Git 文档库”的分支和“远程Git 文档库”的分支之间的对 应关系. |
git push “远程Git 文档库”的url 分支名称 | 把指定分支的最新状态送到指定的“远程Git文档库”。执行这个指令不会在配置文件中 记录“本地Git 文档库”的分支和“远程Git文档库”的分支之间的对应关系。 |
git push –all | 把“本地Git 文档库”中所有的分支传送到“远程Git 文档库”。 |
git push “远程Git 文档库”的名称 –delete[分支名称] | 删除“远程Git 文档库”中的指定分支。 |
git rebase 分支名称 | 把指定分支的修改运用到当前的分支。当前分支会变成从指定的分支的HEAD 节点长 出来。 |
git rebase –abort | 如果执行rebase 指令后出现冲突的情况,可以使用这个指令取消rebase 的操作。 Git 文档库会恢复到还没有执行rebase 之前的状态。 |
git rebase –continue | 执行rebase 指令后出现冲突的情况,而且我们己经编辑好发生冲突的文件, 接着就可以执行“git add”指令, 把新的文件内容加入Git 索引, 最后再执行这个指令,完成rebase的操作。 |
git reflog HEAD 或是任何分支的名称 | 显示HEAD 或是任何分支变动的历史记录。如果不加任何参数,默认会列出HEAD 变动 的历史记录。 |
git remote -v | 显示和“远程Git 文档库”相关的设置。 |
git remote add [“远程Git 文档库”的名称] [“远程Git 文档库”的url] | 在“本地Git 文档库”的配置文件中加入指定的“远程Git 文档库”名称, 并且设置它 的url |
git remote rm “远程Git 文档库”的名称 或者 git remote remove “远程Git 文档库”的名称 |
删除“本地Git 文档序”的配置文件指定的“远程Git 文挡库”名称。 一旦删除“远程Git 文档库”的名称,所有属于它的追踪 分支也会一并消失。如果要再还原回来,只要再执行”git remote add”指令 和“ git remote update”指令即可。 |
git remote rename 旧名称 新名称 | 改变“远程Git 文档库”的名称。改变“远程Git 文档库”的名称之后, 和它相关的远程追踪分支的名称也会自动更新。 |
git reset HEAD 文件名 | 将指定文件的内容从Git 索引中删除。如果没有加上文件名,则会清除 Git 索引中所有的内容。 |
git reset –soft commit 节点标识符或是标签 或者 git reset –mixed commit 节点标识符或是标签 或者 git reset –hard commit 节点标识符或是标签 |
将Git 文档库“消磁”,让Git 文挡库恢复到某一个commit 节点的状态, 如果使用“–soft "选项,表示只有文档库中的数据会更改, Git 索引和文件夹中的文件都不会受到影响。如果使用“–mixed ”选项(这是默 认的选项),表示Git 索引也会恢复到指定节点的状态,但是文件夹中的文件仍然不会 受到影响。如果使用“–hard ” 选项,则文档库、Git索引和文件夹中的文件都会恢复到 指定节点的状态。 |
git revert commit 节点 | 回到指定的commit 节点的前一个节点的文件状态。执行完毕后会新增一个commit 节 点。请注意和“ git reset ”指令的差别。 |
git revert –abort | 如果执行“git revert”指令的时候发生冲突,可以执行这个指令取消revert 的操作。 |
git rm 文件名 | Git 会执行两项检查: Git 索引中有没有该文件的内容(也就是 刚刚有没有执行过“git add 文件名”),如果有,表示这个文件的内容和文档库中的不 一样,为了避免遗失数据, Git 会显示提醒信息,然后放弃执行: 2. 文件夹中的文件内容是不是和文档库中的一样,如果不一样, Git 同样会显示提醒 信息,然后放弃执行,以免遗失数据。如果通过以上两项检查, Git 会马上删除文 件夹中的文件,然后在索引中记录要从文档库中删除该文件。最后必须再执行”git commit”指令才会真正从文档库中删除文件。 |
git rm –cached 文件名 | 把指定的文件从tracked 状态变成untracked状态,也就是说从此以后不需要在文档库中 更新这个文件, 而且Git 索引中这个文件的内容也会被删除,但是Git 不会从文件夹中 删除这个文件(这是加上”–cached”选项最大的差别)。 |
git shortlog | 按照人名的字母顺序,列出每-个人执行commit 的次数和说明。 加上“–numbered ”选项(或是“ -n ” )可以按照commit 次数,由高至低按序排列。 如果不需要显示commit 说明,可以加上”–summary "选项(或是“-s ”)。 |
git show commit 节点标识符或是标签 | 显示特定commit 节点的详细信息。commit节点标识符是一组很长的16 进制数字,指 定commit 节点标识符时,不需要将它完整列出。一般只要使用最前面4 个数字即可, Git 会向动找出对应的节点。如果找到超过一个以上的节点, Git 会显示错误信息, 这时候换长一点的数字就可以解决。 |
git show 文件名 | 显示指定文件最新版本的修改情况。也就是比较文件最新版本和前一个版本的差异。 |
git stash list | 显示Git 暂存区的状态。 |
git stash pop 或者 git stash apply | 取出暂存区的文件,将它们的内容合并到当前文件夹中的文件。 |
git stash save | 这个指令会执行下列两项工作: 存储文件夹中被Git 追踪的文件和文档库中最新文件版本的差异: 把文件夹中被Git 追踪的文件还原成文档库中最新的文件版本。 |
git status | 这个指令会执行以下3 项工作: ]. 检查Git 索引的内容,看看是否需要执行commit 存入文档库。 2. 对比文件夹中的文件和文档库中的文件,列出修改过的文件列表。 3. 列出untracked 状态的文件。 |
git tag 自定义的标签名称[commit 节点标识符或是标签] | 指定的commit 节点贴上自定义的标签,之后就可以用这个自定义的标签来指定这个 commit 节点。 |
git tag -d commit 节点标签 | 删除自定义的commit 节点标签。 |
gitk –all | 启动图形操作模式,如果加入“–all ”选项,表示要显示全部的分支,否则只会显示当前 操作中的分支。 |