一. 概述
本文主要介绍关于 git 的命令以及其用法,可能并不全面,仅限于了解到并经常使用 git 命令,方便日后使用时进行查看、回顾。
二. 命令介绍
拉取仓库命令
git clone (github 上的 git 地址):
可以将远端分支克隆到本地。
分支相关指令
git checkout -b 分支名称:
创建并切出到创建的分支。
git branch <branchname(分支名称)>:
创建新的分支,但是不会切出到此分支。
git checkout (分支名称):
切换到指定分支,指定分支必然已存在,否则会报错。
git branch -d (分支名称):
删除指定分支
git branch:
查看本地所有分支,并查看当前所处分支。
git branch -r:
查看远程所有分支。
git branch -a:
查看本地和远程的所有分支。
git push origin --delete\[branchname\]:
删除远程分支,删除后还需推送到服务器。
git branch -m <oldbranch><newbranch>:
重命名本地分支。
上传本地提交
git push:
将当前 branch 指向的 commit 提交到远端,同时将分支上的一系列 commits 提交到远端(只能用于已提交至远端的分支)
git push 仓库名 分支名:
将分支提交到指定仓库的指定分支,可直接提交至远端(origin为当前仓库的默认名称)
合并其他分支
git merge 分支名称:
从分支分叉位置开始,将目标分支的所有提交合并到当前分支形成一个 commits 提交到当前分支。
拉取远程的提交内容
git pull:
从远端拉取分支的所有提交,其实现原理相当于把远端的提交都拉取到本地,再把这些提交 merge 到现在的分支。
git add 命令
git add 文件名:
将文件加入暂存区。
git add .:
保存新的修改和新建到暂存区。
git add -u:
保存新的修改或删除到暂存区。
git add -A:
暂存所有修改到暂存区。
注意:这里添加的改动是文件的改动不是文件名。
建议使用 add 命令进行保存文件修改时,使用 git add 文件名
进行操作,防止有文件不能使用 git add .
进行保存。
查看日志
git log:
查看所有提交记录。
git log -p:
查看提交记录详细信息。
git log -online -n:
展示自己提交的最近的那条日志。
变基
git rebase 分支名:
将提交记录的基准点设置为指定的分支。
merge 的提交往往和在日志树上形成一个一个的分叉,这样看来会有点混乱,所以我们可以使用 rebase 来形成一个单一的链式结构,使日志记录更加清晰。它的原理是把指定分支的最后一个提交作为我们分支的基础位置,然后把我们分支同指定分支的分叉位置起的所有提交,重新从基础位置再提交一次。
修正提交
git commit --amend:
修正刚刚提交的内容。
上面的指令仅能修改最近一次的提交,如果想修改最近几次的提交,可用下面的指令。
git rebase -i 提交位置[^]:
交互式 rebase 修正,其中 ^ 表示提交位置的前一个提交,^^ 表示前两个提交,也可以使用 ~num 表示前 num 个开始交互式变基。
注:rebase 过程中需要调整的提交记录要将对应的 pick 改为 eidt,退出就会开始 rebase,然后用 commit --amend
调整记录信息,rebase -continue
继续 rebase 直至完成。
撤销提交
git reset --soft
:回退到某个版本,只回退了commit的信息,修改完本地代码后,可以重新提交。
git reset --mixed:
表示默认参数,为了重置暂存区的文件和上一次文件保持一致。
git reset --hard
:表示回退到对应的版本。本地代码也会进行回退。
git reset --hard HEAD^:
撤销上一个提交,清空工作区和暂存区。
git rebase -i
rebase :-i 也可撤销,消除对应的 pick 即可。
git rebase --onto branch 提交起点 提交终点:
将当前分支的起点到终点的提交记录 rebase 提交至目标分支。
注:起点位置不包括起点。
git revert :提交记录
撤回指定提交记录的提交,原理是 git 提交一次同指定提交几率相反的操作。
关于撤销暂存区的内容至工作区的指令:
git reset HEAD -- .:
注意最后的一个 . (点),此命令可以实现一次性撤销所有放入暂存区的文件。
git reset HEAD -- filename:
撤销指定目标文件。
git rm --cached filename:
撤销指定目标文件。
以上三种方法只是将文件从暂存区中删除(撤销)了,并不会修改文件内容,也不会删除文件,在本地文件夹中还能找到,撤销后的文件状态是未被暂存的状态。
同时使用 git rm -f filename
命令也可以将文件从暂存区删除,但同时也会删除本地文件,回收站中也找不到,所以要慎重使用该命令来撤销暂存区的文件。
推送提交记录到远端
git push:
推送提交记录到远端。
git push origin branch -f:
强行推送。如果分支已经推送到远端,又在本地更改了 commits 提交记录,在不影响他人的情况下可以使用此命令强行提交至远端分支。
注:此命令不可以用于 master ,仅限于自己的分支,而求该命令会覆盖他人提交记录,使用时要格外小心。
git reset 命令
reset 命令的本质是重置 head 位置以及 branch 位置,它可以用来清空本地改动内容,可以回滚本地提交,还可以将内容重置到指定提交记录处。
git reset --hard :提交记录
重置 head 到指定位置,此时暂存区和工作区的提交记录会被直接删除。
git reset :提交记录
重置 head 到指定位置,会把暂存区和工作区的内容均放入工作区。
git reset -soft :提交记录
重置 head 到指定位置,会把因重置 head 位置产生的变动加入到暂存区。
git checkout 命令
git checkout branch|commit|文件名:
checkout 命令就是签出指定的 commit ,可以签出分支、提交记录甚至文件。
git checkout -detach
head :和 branch 指针分离,此命令很少使用。
本地缓存
git stash:
缓存未提交文件。
git stash pop:
恢复缓存文件。
git stash -u:
缓存包括 untrack 在内的文件。
git reflog 指令
git reflog branch:
查看所有分支所有操作记录,有时可以用来找回删除的分支。
git clean 命令
git clean -[dfxn]:
删除 git 目录下 untrack 文件。
git clean -d:
删除未被添加到 git 路径下的文件。
git clean -f:
强制运行。
git clean -x:
仅删除 .gitignore 里标记过的文件,那些既不被 git 版本控制,又没有在 .gitignore 里的文件会被保留。
git clean -n:
显示将要删除的文件和目录。
git diff 命令
git diff:
比较当前工作区中文件的改动。
git diff -stage
或 git diff -cache:
比较当前暂存区中文件与上次提交的差异。
git diff -stat:
查看简单的 diff 结果。
git restore 命令
git restore <文件>
:撤销指定文件的改动,只对版本库里的文件有效,默认撤销工作区中的改动。
--staged
还原暂存区中指定文件至工作区。
git restore .:
对所有文件进行同样的操作。
git fetch 命令
拉取远端的分支,不合并,与 pull 的区别在于 git pull = git fetch + git merge。
git fetch <远程主机名称>:
将某个远程主机的更新全部取回本地。
git fetch <远程主机名> <远程分支名称>:<本地分支名称>:
只取回特定分支的更新。
git fetch -p <远程主机名称>:
删除本地缓存的远程分支信息(及远端已删除、本地已删除,但使用 git branch -a 仍可以看到的分支)
git revert 指令
git revert <commit>:
撤销指定的提交,实质是对指定提交内容进行一次方向的提交。
git revert <commit1>..<commit2>:
撤销指定 commit1 至 commit2 区间内的提交,不包括 commit。
git revert --no-commit :commit1
revert 会后默认 commit ,--no-commit 会取消这次 commit ,改动仅放在暂存区。
git remote 指令
git branch:
查看本地本地所有分支。
git remote:
列出已存在的远程分支。
git remote -V | --verbose:
列出详细信息,在每一个名字后面列出其远程 url 。
git remote add url:
添加一个远程仓库。
git rm 指令
git rm:
删除工作区文件,并将这次删除放入暂存区。
git rm -f:
强制删除工作区文件,并且将这次删除放入暂存区。
git rm --cached:
从索引中删除文件。但是本地文件还存在,只是不希望这个文件被版本控制。
git cherry-pick 指令
git cherry-pick <commit>:
将指定提交记录提交到当前分支。
git cherryy-pick <commit1><commit2>..:
将指定多个提交记录提交到当前分支,每个提交记录用空格分隔。
git grep 指令
git grep:
检索文件中的文本内容。
grep 功能的强大参数有很多,具体使用时可以通过 grep -help 指令获取详细介绍。
三. 补充
修改本地Git的用户信息
git config --global user.name "sagewang";
git config --global user.email "sagewang@xx.com";
可以在下面的网址中学习 git 的相关命令,通过一步步教学引导很好地练习相关 git 命令。
四. ending
在进行开发过程中, git 命令使用十分频繁,在多人开发的过程中,使用 git 能更好地进行代码的管理也方便各人的代码管理和检查。