Git 常用命令集

Git 常用命令集

个人使用
git的一些总结,一下常用命令的互相搭配使用,能非常完美的处理好日常遇到的
99%的情况(不敢说100%,得留点余地)。

还有一些使用频率非常低的指令没有记录,至少普通开发者非常不常用,以后可能会补充。

话不多说

首先需要先下载
git这个还是要说一下的

在这里推荐一个学习git的网页小游戏,输入命令后显式的展示仓库变化,用来学习git还是不错的
链接:https://learngitbranching.js.org/

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 初始化仓库,默认为master分支
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 resetadd过的所有文件撤销到未add的状态
git checkout <文件完整路径+完整名> 一个还没有add的文件,撤销修改
git checkout . 还没有add的所有文件,撤销修改

1.7 远程库和分支的链接操作

git remote -v 查看对应的远程仓库地址
git clone <远程仓库地址链接> 克隆某个远程库,默认库名为origin
git clone <远程仓库地址链接> <库名> 克隆某个远程库,并自定库名
git remote remove <远程仓库名> 和远程的某个仓库解除绑定关系
git remote add <远程仓库名> <远程仓库地址链接> 和某个远程仓库建立绑定关系
git remote set-url <远程仓库名> <要改为的远程仓库地址链接> 修改绑定的远程库链接
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为公钥,需要打开复制其中的内容,粘贴到需要的git远程仓库网站的账户设置中(另一个为私钥,切记保管好)

注:一个ssh钥匙对,在一个git远程仓库网站中,只能被一个用户添加。

如果有另一个用户,也想把仓库共享给这台设备,再次写入公钥,则会失败。

比如现在需求,就需要一台设备,能拉取到github中多个账户的仓库,该如何设置?

再次输入ssh-keygen生成秘钥对,但是不能一直回车,需要在给秘钥对命名时,输入一个新名字,否则会替换原有的。
或者也可以直接输入ssh-keygen -f id_new
生成完毕后,进入对应存放ssh钥匙对的.ssh文件夹中,会发现又多了一对秘钥,名字分别为id_newid_new.pub
此时,可以把新的id_new.pub的内容复制到github中另一个账户的setting中,但是,本地设备需要设置一下。

进入到本地的设备的存放ssh钥匙对的.ssh文件夹中,新建名为config的文件,输入以下内容进行保存:

Host github.com
  HostName github.com
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/id_rsa
Host new.github.com
  HostName github.com
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/id_new

我们知道,在github中使用ssh链接时,链接的格式为:git@github.com:<用户名称>/<项目名称>.git
此时,有github中的用户A和用户B,都有ssh链接给到这台设备,分别是:
git@github.com:user-A/item-A.git
git@github.com:user-B/item-B.git

则此设备在绑定远程仓库的时候,需要在链接上做手脚。
第一条不用动,第二个需要参照配置文件的Host进行修改,两条链接分别改为:
git@github.com:user-A/item-A.git(没有变化)
git@new.github.com:user-B/item-B.git
此时,设备可以成功绑定这两个账户的仓库。

依次类推,设备绑定多个账户,不再是问题,关键就是配置config文件,能够对应起来即可。

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,即可看到,可编辑更改

    原文作者:git
    原文地址: https://segmentfault.com/a/1190000017875714
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞