Git 经常使用命令集

Git 经常使用命令集

我的使用 git的一些总结,一下经常使用命令的互相搭配使用,能很是完美的处理好平常遇到的 99%的状况(不敢说100%,得留点余地)。
还有一些使用频率很是低的指令没有记录,至少普通开发者很是不经常使用,之后可能会补充。
话很少说
首先须要先下载 git这个仍是要说一下的

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


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 图形化展现合并历史git

1.2 初始化基本操做

git init 初始化仓库,默认为master分支
git add -A 提交所有文件修改到缓存区
git add <具体某个文件路径+全名> 提交某些文件到缓存区
git commit -m "<注释>" 提交代码到本地仓库,并写提交注释
git commit –a -m "<新注释>" 更改上次提交的注释github

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 <新分支名> 把基于当前分支新建分支,并切换为这个分支npm

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 回滚操做

注意,当回滚代码时, resetrevert均可以使用,下面是两个指令的区别
reset:真实硬性回滚,目标版本后面的提交记录所有丢失了
revert:一样回滚,但实际这个回滚操做,算是一个提交,目标版本后面的提交记录也所有都有,并且会多一次提交,就是此次 revert

--hard的功能:不加他,文件修改会保留,都会处于add以前的状态;加上他,文件修改会被删除,丢失掉app

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的全部文件,撤销修改ssh

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 清空全部储藏中的工做fetch

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

相关文章
相关标签/搜索