git--实战使用总结

目录

Git环境 配置

三棵树

查看配置信息

Git 创建仓库

git init

使用方法

Git 常用指令

分支命令

 合并分支到master上的流程

git commit,git push,git pull,git fetch,git merge的含义与区别

git blame

git bisect

冲突标记

git的版本回退

查看与对比历史提交记录

查看历史提交信息

查看完整的历史提交(commit)信息

git diff用来比较文件之间的不同,其基本用法如下:

git分支解析

git tag的用法及意义

使用方式

idea整合git

在IDEA中设置.ignore插件忽略不必要提交的文件

添加模板

下面演示如何通过IDEA将一个项目上传到git上

第一步

第二步生成本地仓库

第三步,建立远程连接,与远程git连接

第四步:使用ssh密钥建立本地git和远端git服务器的免密连接

第五步,点击push,将代码上传到git上

idea从git上直接拉取生成工程


Git环境 配置

需要注册一个github账号

Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。

在你下载的git客户端需要配置这些信息,进行账户的初始化

这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:

  1. /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
  2. ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
  3. 当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。

在 Windows 系统上,Git 会找寻用户主目录下的 .gitconfig 文件。主目录即 $HOME 变量指定的目录,一般都是 C:\Documents and Settings\$USER。此外,Git 还会尝试找寻 /etc/gitconfig 文件,只不过看当初 Git 装在什么目录,以此作为根目录来定位。

用户信息

配置个人的用户名称和电子邮件地址指令:

$ git config --global user.name "xxxx" 
$ git config --global user.email test@xxxxx.com

注意:如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里

三棵树

  1. 工作区域 Working Directory :平时放代码项目的地方
  2. 暂存区 Stage (Index) :临时存放你的改动,只是一个文件,保存即将提交的文件列表信息
  3. Git仓库:存放数据的位置。其中,HEAD指向最新放入仓库的版本

查看配置信息

要检查已有的配置信息,可以使用 git config --list 命令:

$ git config --list 
http.postbuffer=2M user.name=xxxx 
user.email=test@xxxxx.com

有时候会看到重复的变量名,那就说明它们来自不同的配置文件(比如 /etc/gitconfig 和 ~/.gitconfig),不过最终 Git 实际采用的是最后一个。这些配置我们也可以在 ~/.gitconfig/etc/gitconfig 看到,如下所示:

vim ~/.gitconfig 

显示内容如下所示:

[http] postBuffer = 2M [user] name = xxxx
 email = test@xxxx.com

Git 创建仓库

你可以使用一个已经存在的目录作为Git仓库

git init

Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令。在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变(不像 SVN 会在每个子目录生成 .svn 目录,Git 只在仓库的根目录生成 .git 目录)。

使用方法

使用当前目录作为Git仓库,我们只需使它初始化。

git init

该命令执行完后会在当前目录生成一个 .git 目录。

使用我们指定目录作为Git仓库。

git init newrepo

初始化后,会在 newrepo 目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。

如果当前目录下有几个文件想要纳入版本控制,需要先用 git add 命令告诉 Git 开始对这些文件进行跟踪,然后提交:

$ git add *.c
$ git add README
$ git commit -m '初始化项目版本'

以上命令将目录下以 .c 结尾及 README 文件提交到仓库中。


Git 常用指令

指令操作一般流程:先克隆一个项目

git clone git@gitxxxxxxxxxx/xxxxx.git

克隆后会产生一个项目的文件夹,此后我们就可以进入项目文件夹中进行  push pull 等操作,此时就不需要使用项目的git地址了(git@gitxxxxxxxxxx/xxxxxx.git),在项目中直接操作git push 等指令。

分支命令

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

$ git branch dev
$ git checkout dev
Switched to branch 'dev'

git branch

列出所有本地分支(当前分支前面会标一个*号。

git branch -r

列出所有远程分支

git branch -a

列出所有本地分支和远程分支

git branch <branch-name>

新建一个分支,但依然停留在当前分支

git checkout -b <branch-name>

新建一个分支,并切换到该分支

git branch --track <branch><remote-branch>

新建一个分支,与指定的远程分支建立追踪关系

git checkout <branch-name>

切换到指定分支,并更新工作区

git branch -d <branch-name>

删除分支

git push origin --delete <branch-name>

删除远程分支

git fetch <remote>

merge之前先拉一下远程仓库最新代码

git merge <branch>

合并指定分支到当前分支

注意:

1.如果远程新建了一个分支,本地没有该分支。

可以利用 git checkout --track origin/branch_name ,这时本地会新建一个分支名叫 branch_name ,会自动跟踪远程的同名分支 branch_name。

git checkout --track origin/branch_name

2..如果本地新建了一个分支 branch_name,但是在远程没有。

这时候 push 和 pull 指令就无法确定该跟踪谁,一般来说我们都会使其跟踪远程同名分支,所以可以利用 git push --set-upstream origin branch_name ,这样就可以自动在远程创建一个 branch_name 分支,然后本地分支会 track 该分支。后面再对该分支使用 push 和 pull 就自动同步。

git push --set-upstream origin branch_name

我们使用分支时可以先在本地创建好分支,比如 dev然后使用 git push --set-upstream origin dev推到远端并创建一个名字相同的远端分支


 合并分支到master上的流程

 首先切换到master分支上

git  checkout master

如果是多人开发的话 需要把远程master上的代码pull下来

git pull origin master

然后我们把dev分支的代码合并到master上

git  merge dev

git commit -m  "**" : 将暂存区的文件提交,并记录日志信息**

git remote -v  :查看当前项目的git地址

git log  : 查看历史提交目录,如果嫌日志信息太多可以使用 git log --oneline
git stash : 备份当前工作区内容,不提交到缓存区

git checkout -- <filename>  : 撤销该文件在暂存区的修改  filename是文件的全路径

git config --list : 查看配置信息列表

git config --global user.name " peanut"  :  设置全局用户名为peanut

git config --global user.email "peanut@XX.com"  : 设置全局用户邮箱为 xxx

git commit,git push,git pull,git fetch,git merge的含义与区别

  •  git commit:是将本地修改过的文件提交到本地库中;
  •  git push:是将本地库中的最新信息发送给远程库(git push -f  强推)
  •  git pull:是从远程获取最新版本到本地,并自动merge;
  •  git fetch:是从远程获取最新版本到本地,不会自动merge;
  •  git merge:是用于从指定的commit(s)合并到当前分支,用来合并两个分支;

git pull相当于git fetch + git merge

git add 文件名或目录  #表示将当前文件的修改放入缓存区 先不提交

git commit -m '版本名称' #将缓冲区提交建立一个版本

两个指令可以一块使用:’

git commit -am "xxxxxx"

注意:如果项目中创建了新文件,必须使用add,也就是 git add .(add 和. 之间必须有空格),修改文件可以使用git commit -am "xxxxxx"

保存当前工作区(不想提交,下次还能继续工作区内容)

git stash 使用大全

用途:stash命令可用于临时保存和回复修改,可跨分支,  比如  git pull 拉代码的时候,或者切换分支的时候,防止冲突和不便,会用到git stash,它的作用是把当前未提交的修改暂存起来,让仓库还原到最后一次提交的状态

使用案例:

项目正在test分支更新版本我们疯狂的写bug,突然没更新前的版本出bug了(意料之中),此时呢我们要切换到master分支去改bug。此时此刻我test分支上修改的文件还不想提交,但是切换分支会提示我错误有文件未提交(如图一)。那么现在我们一起学习一下   git stash   吧!

 (图一)

现在直接输入  git stash    命令,将当前分支存起来,id为adad619 实名制购票 

接下来我们就可以随意切换分支了,等你切换到其他分支再切回来的时候,我们想恢复刚刚存储的文件。

现在先输入  git stash  list   命令去查看我们“存储”的列表

可以看到我们刚刚存储id为  ‘adad619 实名制购票’  的信息

有两种方式我们可以恢复

一、用  git stash apply 命令恢复,但是恢复后,stash内容并不删除,这时候再执行    git stash list  命令,id 为 adad619 实名制购票 的储藏项目还会在列表中,你需要用 git stash drop 来删除;

注意: 如果有一个分支上多个 stash,如果需要恢复指定的 stash ,可以在命令尾部加id,如   git stash apply stash@{0}  ,同样删除指定 stash 项目则执行如  git stash drop stash@{1}  。


二、用   git stash pop  命令,恢复的同时把 stash 存储列表的内容也删了。这时候再执行   git stash list  命令,id 为  adad619 实名制购票 的储藏项目不会在列表中。

此时再查看  cat <filename>   会发现之前的改动还存在,且执行  git status 就会继续显示该分支上有改动未提交。

eg:为了fix 一个bug,  先stash, 使返回到自己上一个commit, 改完bug之后再stash pop, 继续原来的工作

注意:在未add之前才能执行stash!!!!

之后切换到其他分支,然后切换回来

  • git stash [save message]
  • 备份当前工作区的内容,保存到git 栈中,从最近的一次commit中读取相关内容
  • 保存,save为可选项,message为本次保存的注释
  • git stash list
    所有保存的记录列表
  • git stash pop stash@{num}
  • 从git栈中获取到最近一次stash进去的内容,恢复工作区的内容。。获取之后,会删除栈中对应的stash
    恢复,num是可选项,通过git stash list可查看具体值。只能恢复一次
  • git stash apply stash@{num}
    恢复,num是可选项,通过git stash list可查看具体值。可回复多次
  • git stash drop stash@{num}
    删除某个保存,num是可选项,通过git stash list可查看具体值
  • git stash clear
    删除所有保存
  • 替换本地改动

假如你操作失误(当然,这最好永远不要发生),你可以使用如下命令替换掉本地改动:
git checkout -- <filename>
此命令会使用 HEAD 中的最新内容替换掉你的工作目录中的文件。已添加到暂存区的改动以及新文件都不会受到影响。

git blame

如果你要查看文件的每个部分是谁修改的, 那么 git blame 就是不二选择. 只要运行'git blame [filename]', 你就会得到整个文件的每一行的详细修改信息:包括SHA串,日期和作者:

git bisect

git bisect使用二分搜索来查找出现错误的commit

冲突标记

<<<<<<<head 是指你本地的分支的

<<<<<<< HEAD
b789
=======
b45678910
>>>>>>> 6853e5ff961e684d3a6c02d4d06183b5ff330dcc

head 到 =======里面的b789是您的commit的内容

=========到 >>>>68的是您下拉的内容

git的版本回退

git reset –hard 版本号 ,但是现在的问题是加入我已经关掉了命令行或者第三个版本的版本号,我并不知道?那么要如何知道第三个版本的版本号呐。可以通过如下命令获取到版本号: git reflog    演示如下:

通过上面的显示我们可以知道,第三个版本的版本号是 e12928c  那么现在我们可以通过命令: git reset –hard e12928c 返回到第三个版本

  1. HEAD^表示上一个
  2. HEAD^^表示上两个
  3. HEAD~10 表示前面的第十个版本
  4. git reset --hard HEAD^ #回跳一个版本
  5. git reset --hard 版本号  #根据版本号跳转到指定的版本

查看与对比历史提交记录

查看历史提交信息

git show [commit_id]      查看某次历史提交信息的完整信息

git show HEAD查看HEAD标签当前指向的提交的完整信息

git show master 查看master分支最新一次提交的完整信息

git show master^或git show master~  查看master分支最新一次提交的父提交的完整信息

git show master^2查看master分支最新一次提交的第二个父提交(也就是父提交的父提交)的完整信息

查看完整的历史提交(commit)信息

git log

可以按键盘空格/字母b键将信息向下/向上翻页,也可以按键盘向上/向下箭头向上/向下按行滚动

git log –p输出每一个commit之间的差异信息

git log --stat输出每一个commit之间的差异统计信息

git log--oneline输出历史commit的简短信息

git diff用来比较文件之间的不同,其基本用法如下:

(1)git diff:当工作区有改动,临时区为空,diff的对比是“工作区与最后一次commit提交的仓库的共同文件”;当工作区有改动,临时区不为空,diff对比的是“工作区与暂存区的共同文件”。

(2)git diff --cached 或 git diff --staged:显示暂存区(已add但未commit文件)和最后一次commit(HEAD)之间的所有不相同文件的增删改(git diff --cached和git diff –staged相同作用)

(3)git diff HEAD:显示工作目录(已track但未add文件)和暂存区(已add但未commit文件)与最后一次commit之间的的所有不相同文件的增删改。

(3.1)git diff HEAD~X或git diff HEAD^^^…(后面有X个^符号,X为正整数):可以查看最近一次提交的版本往过去时间线前数X个的版本之间的所有同(3)中定义文件之间的增删改。

(4)git diff <分支名1> <分支名2> :比较两个分支上最后 commit 的内容的差别

(4.1)  git diff branch1 branch2 --stat    显示出所有有差异的文件(不详细,没有对比内容)

(4.2)  git diff branch1 branch2              显示出所有有差异的文件的详细差异(更详细)

(4.3)  git diff branch1 branch2 具体文件路径 显示指定文件的详细差异(对比内容)

git分支解析

参考 Git详解之三 Git分支 - 哈哈那个嗒 - 博客园

git tag的用法及意义

        命令是用来给当前项目状态(在某次commit后)打标签的,目的是便于以后将项目状态回滚到当时打标签的状态,简单理解:tag就是打一个标记而已,方便取出或回退到这个标记点。也许你会问,直接git checkout <commit-sha1>不就可以了?当然可以,前提是你确实能记得住也愿意去记那条冗长的sha1码。sha1码好记还是tag name好记呢?

使用方式

1.查看本项目所有tag

  git tag 或 git tag -l

2.添加tag git tag 标签名

git tag v1.0 会在当前commit打上名为“v1.0”的标签;

git tag v1.1 3a11706f8  会在commit id为 3a11706f8的那次提交打上“v1.1"的标签,即可以指定commit id来打标签

git tag -a v1.0 -m "relase v1.0" ,-a指定标签名,-m指定说明文字

git tag -a v1.1 -m "relase v1.1" 3a11706f8 也是可以得。

以上四种是添加tag的所有方法,另外,我发现可以同一次commit提交打多个tag。

3.删除tag git tag -d 标签名

git tag -d v1.0

4.将本地的tag推到远程

git push origin v1.0 仅将v1.0的标签推到远程

git push origin --tags 将所有未推送的标签都推到远程

5.删除远程tag

step1: 删除本地tag git tag -d v1.0

step2:git push origin :refs/tags/v1.0 

6.查看标签信息

git show 标签名

git show v1.0

idea整合git

在File–>Setting->Version Control–>Git–>Path to Git executable选择你的git安装后的git.exe文件,然后点击Test,测试是否设置成功

在IDEA中设置.ignore插件忽略不必要提交的文件

5.1 下载ignore插件

idea-gitignore-2.3.0-互联网文档类资源-CSDN下载
去这个网址下载好压缩包,选择Install plugin from disk。。

添加模板

也就是你不想上传到git上东西,比如.idea  .im文件

下面演示如何通过IDEA将一个项目上传到git上

第一步

在git账户上建立一个你要上传项目的git名称,比如flume_kafka_channel,git上会生成一个项目的地址或者叫路径,这个在IDEA上传项目的时候会用。

第二步生成本地仓库

按照下图的方式创建本地仓库

将项目导入到本地仓库

第三步,建立远程连接,与远程git连接

点击Remotes,会弹出一个窗口,把你刚才Git上项目的git地址,添加进去

第四步:使用ssh密钥建立本地git和远端git服务器的免密连接

生存密钥

      输入指令:ssh-keygen -t rsa -C "邮箱",提示输入保存密钥路径,直接回车即可(三次默认回车)。

注:后面是自己的前面设置的邮箱($ git config --global user.email test@xxxxx.com)

然后出现下图所示的图案,表示密钥生成完毕,并且会生成2个文件:id_rsa和id_rsa.pub。

最后找到id_rsa.pub文件,粘贴里面全部的内容,找到git服务器的个人账户设置,点击添加sshKeys,添加key,key的内容为你粘贴的全部信息。

第五步,点击push,将代码上传到git上

到此通过IDEA将一个项目上传到git上完成。

idea从git上直接拉取生成工程

拉取项目是 直接点击new  file  然后选择from  version  control

会调出如下的界面 在URL填写你要拉取项目的git地址即可

注意:多人进行项目开发时,需要先拉取才能进行提交更新。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿华田512

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值