我使用的是IDEA,IDEA本身继承的有Git,并且使用起来十分方便,对于不熟悉Git命令的同学来说是十分友好的,下面我就大概介绍一下IDEA中git的使用以及各种情况下所使用的git的命令。
IDEA中Git的使用
关于配置git就不说了,大家可以去搜索一下,首先说一下Git的位置,如下所示:
在IDEA的右下角有一个Git:xxxx,其中xxxx指的是Git当前所在的分支,点击分支,我们可以看到下图所示:
其中Local Branches指的是当前项目的本地分支、Remote Branches指的是远程仓库的远程分支,无论是本地分支还是远程分支,我们都可以单机并且选择check out来进行切换。本地分支的话我们可以直接通过New Branch创建并且将创建的本地分支通过push上传到远程分支上。(如果直接在远程仓库创建了分支,那么更新一下远程分支就可以了,最简单的办法就是直接pull一下代码,新建的远程分支就更新过来了,当然你也可以通过命令来进行更新,个人认为直接pull更快一些)
// 将远程仓库的分支列表更新到最新,取回本地以便查看远程分支列表
1. git fetch
// 查看远程分支列表
2. git branch -a
// 核心一步:将远程仓库的xxx分支拉取到本地xxx分支,并切换到xxx分支
3. git checkout -b xxx origin/xxx
常见的情况下使用的Git命令
初始化仓库:git init
git init命令用来初始化一个仓库,初始化完成以后,git仓库会在初始化的项目目录下生成一个.git目录,该目录包含了资源的所有元数据。
Git配置用户信息:
Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。
这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:
1./etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
2.~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
3.当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。
例子:
$ git config --global user.name "runoob"
$ git config --global user.email test@runoob.com
配置完成以后我们可以在当前user的.gitConfig文件下面看到如下信息
从远程仓库克隆代码
git clone [url]
例子:git clone git@github.com:schacon/simplegit.git
查看远程分支列表
git branch -a
查看本地分支列表
git branch
创建/切换本地分支
git branch yourbranch
git checkout yourbranch
或者:git checkout -b yourbranch
删除本地/远程分支
git branch -d xxxxx
git push origin -d yourbranch
git命令add
git add .
. 表示当前目录
git命令commit
git commit -m "xxx"
commit是将暂存区里的改动给提交到本地的版本库,-m后面的参数表示标注一下本次提交代码的内容
git命令push
git push <远程主机名> <本地分支名> <远程分支名>
例子:git push origin master:refs/for/master
上述例子是将本地的master分支推送到远程主机origin上的对应master分支, origin 是远程主机名。第一个master是本地分支名,第二个master是远程分支名。
查看当前项目工作目录与暂存区的区别
git status
撤销
因为暂存区的存在,撤销修改分为几种情况(通过 git status 查看仓库状态时会提示相关撤销修改的命令):
- 修改后,文件没有通过git add放入暂存区(即文件一直在工作区):用 git checkout -- 文件名 撤销工作区的改动(回到跟版本库一样的状态,即回到最近一次 git commit时的状态,所有改动全部清除)
- 修改后,文件放入暂存区,且文件没有再次修改(即文件已经进入暂存区):分两步:先用 git reset <文件名> 撤销 git add 操作(此时更改仍留在工作区),再执行 git checkout -- 文件名 清除工作区的改动
- 修改后,文件放入暂存区,且文件再次修改:分三步:先用 git checkout -- 文件名 撤销工作区的改动,再用 git reset <文件名> 撤销 git add 操作(此时更改仍留在工作区),最后执行 git checkout -- 文件名 清除工作区的改动
- 通过 git checkout -- 文件名 命令可以撤销文件在工作区的修改。
- 通过 git reset 文件名 命令可以撤销指定文件的 git add 操作,即这个文件在暂存区的修改。
- 通过 git reset 命令可以撤销之前的所有 git add 操作,即在暂存区的修改。
备注:git checkout -- 文件名
命令中的 --
表示命令行在 --
之后没有更多的选项。这样的好处是,如果碰巧有一个分支与文件名重名,仍然可以恢复该文件,而不是切换到同名的分支。
commit以后如何撤消回未commit状态
git reset --soft HEAD^
解释:HEAD^的意思是上一个版本,也可以写成HEAD~1,如果你进行了2次commit,想都撤回,可以使用HEAD~2;
- --soft 不删除工作空间改动代码,撤销commit,不撤销git add .
- --mixed 不删除工作空间改动代码,撤销commit,并且撤销git add . 操作这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
- --hard 删除工作空间改动代码,撤销commit,撤销git add . ,完成这个操作后就恢复到了上一次的commit状态
备注:如果commit注释写错了,只是想改一下注释的话只需要:git commit --amend 然后就会进入vim编辑器,修改完保存就好了。
git查看当前提交代码与上一次提交的不同之处
HEAD commit版本
Index staged版本
查看尚未暂存的文件更新了哪些部分,不加参数直接输入
git diff
此命令比较的是工作目录(Working tree)和暂存区域快照(index)之间的差异
也就是修改之后还没有暂存起来的变化内容。
查看已经暂存起来的文件(staged)和上次提交时的快照之间(HEAD)的差异
git diff --cached
git diff --staged
显示的是下一次commit时会提交到HEAD的内容(不带-a情况下)
显示工作版本(Working tree)和HEAD的差别
git diff HEAD
直接将两个分支上最新的提交做diff
git diff topic master 或 git diff topic..master
输出自topic和master分别开发以来,master分支上的changed。
git diff topic...master
Changes that occurred on the master branch since when the topic
branch was started off it
查看简单的diff结果,可以加上--stat参数
git diff --stat
查看当前目录和另外一个分支的差别
git diff test
显示当前目录和另一个叫'test'分支的差别
git diff HEAD -- ./lib
显示当前目录下的lib目录和上次提交之间的差别(更准确的说是在当前分支下)
比较上次提交commit和上上次提交
git diff HEAD^ HEAD
比较两个历史版本之间的差异
git diff SHA1 SHA2
通过git合并各个分支代码过程,并解决冲突
1、如果正常情况下,分支和主分支的代码没有冲突,切换到主分支:使用 git merge dev即可快速合并分支,期中dev是你的分支名称。
如果主分支也修改了一部分代码,分支也修改了代码,那么会产生冲突,那么先使用 git merge dev合并分支,这样git会将所有修改或新增的代码都在主分支的待提交显示,冲突的话会有黄色!标注。那么就需要手动修改已冲突的代码,删掉无用的,保留有用的代码,如果是自己修改的就可以自己解决冲突,如果是多人修改,最好多人一起查看冲突,避免代码误删。
修改冲突代码后,使用git add readme.txt(冲突代码类名)手动提交,然后再全部提交更新。
2、快速合并是每个时间段都会插入代码的,这样如果新分支代码有问题,不太好解决,所以用一次性合并分支,如果有问题,线上部署以前的代码,不至于服务器挂了。
git命令:git merge --no-ff -m "合并pc分支" www_2.0
期中git merge --no-ff -m是git合并代码,不多解释了。后面 "合并pc分支"是合并到主分支的备注,www_2.0是需要合并到主分支的分支名称。
查看git历史
git log
显示提交历史
git show <commit-hashId>
显示某次提交的内容
本地回退/切换到提交过的某个版本
首先是使用 git reflog 命令行,如下:
$ git reflog
69c9ef3 HEAD@{0}: commit (amend): test
f2ba7c4 HEAD@{1}: pull: Fast-forward
a90ac5d HEAD@{2}: checkout: moving from master to dev
然后再使用 git reset --hard tag 命令行,如下:
git resert -- hard 69c9ef3
tag 代表某条历史提交记录的标志