共计 4594 个字符,预计需要花费 12 分钟才能阅读完成。
Git 常用命令集
个人使用 git 的一些总结,一下常用命令的互相搭配使用,能非常完美的处理好日常遇到的 99% 的情况(不敢说 100%,得留点余地)。还有一些使用频率非常低的指令没有记录,至少普通开发者非常不常用,以后可能会补充。
话不多说 首先需要先下载 git 这个还是要说一下的
1. 常用命令
1.1 最常用 / 版本对比 / 其他
git status 查看当前分支状态 git reflog 查看每一次的命令,都做过什么 git log 查看此分支完整的提交记录,回车继续看,q 停止 git log –oneline 查看此分支简略的提交记录,只展示提交号和提交信息 git show 查看最近一次提交的具体代码变化 git show < 提交 ID> 查看某次提交的具体代码变化 git diff 查看当前代码 add 后,会 add 哪些内容 git diff –staged 查看现在 commit 提交后,会提交哪些内容 git diff HEAD 查看当前代码 add 并提交后,会提交哪些内容 git log –oneline –graph 图形化展示合并历史
1.2 初始化基本操作
git init 初始化仓库,默认为 mast 分支 git add -A 提交全部文件修改到缓存区 git add < 具体某个文件路径 + 全名 > 提交某些文件到缓存区 git commit -m “< 注释 >” 提交代码到本地仓库,并写提交注释 git commit –a -m “< 新注释 >” 更改上次提交的注释
1.3 分支操作
git branch 查看本地所有分支 git branch -r 查看远程所有分支 git branch -a 查看本地和远程所有分支 git merge < 分支名 > 合并分支 git merge –abort 合并分支出现冲突时,取消合并,一切回到合并前的状态 git branch < 新分支名 > 基于当前分支,新建一个分支 git checkout –orphan < 新分支名 > 新建一个空分支(会保留之前分支的所有文件)git branch -D < 分支名 > 删除本地某个分支 git push < 远程库名 > :< 分支名 > 删除远程某个分支 git branch < 新分支名称 > < 提交 ID> 从提交历史恢复某个删掉的某个分支 git branch -m < 原分支名 > < 新分支名 > 分支更名 git checkout < 分支名 > 切换到本地某个分支 git checkout < 远程库名 >/< 分支名 > 切换到线上某个分支 git checkout -b < 新分支名 > 把基于当前分支新建分支,并切换为这个分支
1.4 推拉操作(push 和 pull)
git pull < 远程仓库名 > < 远程分支名 > 拉取远程仓库的分支与本地当前分支合并 git pull < 远程仓库名 > < 远程分支名 >:< 本地分支名 > 拉取远程仓库的分支与本地某个分支合并 git push < 远程仓库名 > < 本地分支名 > 推送本地某个分支到远程与其对应的分支上,远程没有则会给远程库新建分支 git push < 远程仓库名 > < 本地分支名 >:< 远程分支名 > 推送本地分支到远程某个分支 git push < 远程仓库名 > :< 远程分支名 > 删除远程某个分支 git push -f < 同上的命令 > 强制提交,覆盖线上 git fetch 获取线上最新版信息记录,不合并,用法和 pull 类似(一个特殊的操作,比如多人开发分支,其他人提交后,自己看分支的时候,可能还知不道线上的分支已经比自己的新了,需要这个指令,来获取一下线上的最新版本,会拉取,但不会合并,存在本地仓库中)
1.5 查看具体文件版本区别(git diff)
git diff < 文件名 > 对比最近提交,和近近次提交的区别,不加文件名,则为整体对比 git diff HEAD^ — < 文件名 > 同上 git diff HEAD~< 一个数字 > — < 文件名 > 上次提交和前第几次提交作对比 git diff < 提交 ID> < 文件名 > 上次提交和某次提交作对比 git diff < 文件名 > 工作区与暂存区比较 git diff HEAD < 文件名 > 工作区与最近提交比较 git diff < 本地分支名 > < 文件名 > 当前分支的文件与其他分支的文件进行比较
1.6 回滚操作
注意,当回滚代码时,reset 和 revert 都可以使用,下面是两个指令的区别 reset:真实硬性回滚,目标版本后面的提交记录全部丢失了 revert:同样回滚,但实际这个回滚操作,算是一个提交,目标版本后面的提交记录也全部都有,而且会多一次提交,就是这次 revert–hard 的功能:不加他,文件修改会保留,都会处于 add 之前的状态;加上他,文件修改会被删除,丢失掉
git <reset/revert> <–hard?> HEAD^ 回退到上次提交 git <reset/revert> <–hard?> < 提交记录 > 回退到之前的某次提交 git <reset/revert> <–hard?> < 某个分支 > 回退到此分支的提交状态,相当于复制分支过来 git reset < 文件完整路径 + 完整名 > 把 add 过的某个文件撤销到未 add 的状态 git reset 把 add 过的所有文件撤销到未 add 的状态 git checkout < 文件完整路径 + 完整名 > 一个还没有 add 的文件,撤销修改 git checkout . 还没有 add 的所有文件,撤销修改
1.7 远程库和分支的链接操作
git remote -v 查看对应的远程仓库地址 git clone < 远程仓库地址链接 > 克隆某个远程库,默认库名为 origin git clone < 远程仓库地址链接 > < 库名 > 克隆某个远程库,并自定库名 git remote remove < 远程仓库名 > 和远程的某个仓库解除绑定关系 git remote add < 远程仓库名 > < 远程仓库地址链接 > 和某个远程仓库建立绑定关系 git push –set-upstream < 远程仓库名 > < 远程分支名 > 当前分支和远程某个分支建立绑定关系
1.8 储藏操作(stash)
经常有这样的事情发生,当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态。而你想转到其他分支上进行一些工作。问题是,你不想提交进行了一半的工作,否则以后你无法回到这个工作点。解决这个问题的办法就是 git stash 命令。
git stash save < 注释信息 > 当前分支提交到储藏,插到储藏序列的最前面(不包括新建文件)git stash save -u < 注释信息 > 同上,会包括新建文件,功能更强大 git stash list 查看所有储藏中的工作 git stash drop < 储藏的名称 > 删除对应的某个储藏 git stash pop 取出储藏中最后存入的工作状态进行恢复,会删除储藏 git stash pop < 储藏对应的数字 > 取出储藏中对应的工作状态进行恢复,会删除储藏 git stash apply 取出储藏中最后存入的工作状态进行恢复,注意,不会删除储藏 git stash apply < 储藏的名称 > 取出储藏中对应的工作状态进行恢复,注意,不会删除储藏 git stash branch < 新分支名 > < 储藏的名称 > 从储藏中新建分支,会删除储藏 git stash clear 清空所有储藏中的工作
1.9 标签操作(tag)
tag 是什么,虽然整个开发过程,每个提交都对应一个提交 ID,回滚也比较方便,但总有一些重大意义的提交,比如从 v0.91 升级到了 v1.0,这个 v1.0 是必须要单独摘出来保存的,否则万一出现回滚事故,导致提交记录丢失呢?虽然可以单独新建分支保存,但分支的功能并不是用来做这个的。冗余的分支在开发时也容易产生误操作。
所以 tag 的用处就来了,他可以把某次提交后的项目,整个单独复制拎出来,命名为一个 tag(可以以项目版本或打 tag 的时间来命名),可以写注释,存在 tag 列表中,与分支隔离开,除非专门命令操作,否则只要项目存在,他们就不会受到影响。
同时,可以使用 tag 快速回滚项目、基于 tag 新建分支等,在项目整体的管理上非常方便。
git tag 列出本仓库中所有 tag 列表 git tag <tag 名 >’ 基于最近的一次提交打 tag(轻量 tag,不推荐)git tag -a <tag 名 > -m ‘< 此 tag 的注释 >’ 基于最近的一次提交打 tag git tag -a <tag 名 > < 提交 ID> -m ‘< 此 tag 的注释 >’ 基于某次提交打 tag git show <tag 名 > 查看此 tag 的 tag 信息 git tag -d <tag 名 > 删除本地某个 tag git push origin :refs/tags/<tag 名 > 删除远程仓库中的 tag git push < 远程仓库名 > <tag 名 >’ 推送某个 tag 至某个远程库 git push < 远程仓库名 > –tags’ 推送所有 tag 至某个远程库 git checkout -b < 新分支名 > <tag 名 >’ 基于某个 tag 新建分支
2. .gitignore 文件
在使用 Git 的过程中,有的文件比如日志、临时文件、编译的中间文件等不要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这些文件的提交。
没错就是.gitignore 文件了。
此文件需要放在.git(默认是隐藏文件,是 git 的本地仓库)同一目录下
写法如下:
node_modules/
dist/
*.map
npm-debug.log*
yarn-debug.log*
yarn-error.log*
这样,当 git add 的时候,上面定义忽略的那些文件,就会被 git 忽略,发生了变化 git 也不会管。
然而有时候,是会出现意外的。
比如,git 已经提交过了,这是后突然说,这里面有个文件需要被忽略,然后我把这个文件写到了.gitignore 文件中。。。无效!这个文件仍然没有被忽略!
这是就需要如下命令,来删除此文件并忽略
git rm -r –cached < 文件路径 + 文件全名 > 在 git 库中删除文件并停止追踪,但实际文件还保留,只是忽略掉。
由此,方可。
3. 生成 SSH 公钥
绑定一个远程仓库,有两种方式:
使用 http 链接的方式
使用 ssh 加密链接的方式
如果远程仓库为公开仓库,则两者在使用上,区别不大;但如果是私密仓库,则 http 方式,需要输入用户名和密码登录后,才可建立联系,但这样一来,需要把私密仓库的账号和密码暴露,即使添加了项目团队成员,如果成员的账号密码暴露,任何人在任何设备上,登录账号密码,至少都能对项目进行拉取操作,所以就有了下面更合适的方式 —ssh。
ssh 的话,则只需要本地设备,输入一条 git 指令,生成一对公钥和私钥,然后把公钥的内容,复制添加到远程库的设置中,让远程库认识此设备,就想当于用户填写了账号和密码,好处是,这种方法在远程库的添加上,只认设备不认账户,这样只用保证设备是安全的,仓库就是安全的。
下面为本地设备生成 ssh
输入 ssh-keygen 来生成 ssh window 默认存放在 C 盘 / 用户 /< 用户名称 >/.ssh 文件夹中 Mac 默认存放在硬盘 / 用户 /< 用户名称 >/.ssh 文件夹中 其中两个文件,id_rsa.pub 为公钥,需要打开复制其中的内容,粘贴到需要的网站中(另一个为私钥,切记保管好)
4. 设置用户名、邮箱、登录账户
git config user.name 查看设置的用户名 git config user.email 查看设置的用户邮箱 git config –global user.name < 用户名 > 设置用户名 git config –global user.email < 邮箱 > 设置用户邮箱
修改用户登录信息
window
控制面板 -> 用户账户 -> 管理 Windows 凭据,即可看到普通凭据中有 git 的账户信息,可编辑更改
Mac
钥匙串访问.app -> 右上角搜索 git,即可看到,可编辑更改