git一些知识

1.安装后的基本配置

当你安装Git后首先要做的事情是设置你的用户名称和e-mail地址。这是非常重要的,因为每次Git提交都 会使用该信息。它被永远的嵌入到了你的提交中:

git config --global user.name "kuangshen" #名称
git config --global user.email 24736743@qq.com #邮箱

只需要做一次这个设置,如果你传递了--global 选项,因为Git将总是会使用该信息来处理你在系统中所 做的一切操作。如果你希望在一个特定的项目中使用不同的名称或e-mail地址,你可以在该项目中运行 该命令而不要--global选项。 总之--global为全局配置,不加为某个项目的特定配置。

2.配置文件的一些信息及命令

配置文件的内容都是存储在本地文件里面。

git config --list/git config -l 用户配置

git config --system --list 系统配置 对应文件:C:\Users\xhw_1\gitconfig

git config --global --list 全局配置 对应文件:D:\softInstall\git\Git\mingw64\etc\gitconfig

具体解释:

在git安装目录下D:\softInstall\git\Git\mingw64\etc\gitconfig

该文件里面对应的数据就是系统配置数据:git config --system --list

文件内容和该命令输出的信息以一对应

该文件夹下就是系统配置信息:C:\Users\xhw_1\gitconfig

 即该命令git config --global --list输出的内容和该文件内容一一对应

既然是一一对应,那么把文件里面的内容删除后,用命令自然也查看不到内容。

如下,内容:

删除文件内容后再次查看:

已经没有name这一项了。

3.其他

 HEAD里面对应的就是当前分支信息

切换分支 实际上就是修改该文件里面的内容,如下,通过命令git checkout -b test切换到test分支,如下文件内容就是test

 

4.常用命令

1.创建项目:

git init在本地一个文件夹中初始化一个项目。

git clone url 把远程仓库克隆到本地文件夹。

2.查看状态git status 提交到暂存区 git add .  从暂存区回退到本地 git reset 提交到仓库 git commit -m "描述"

如下,no branch test(在test分支上)

nothing to commit,working tree clean(没有任何需要提交的东西,工作树是干净的)

 在项目中新建一个hello.tex文件,然后再执行命令git status查看状态如下

Untracked files:(未跟踪的文件),这里提示有一个为跟踪的文件hello.txt

新建的文件是属于未跟踪文件,只有执行了git add .后是跟踪文件,所以这里也提醒我们使用git add .命令去提交到暂存区

如下,通过git add .命令去提交到暂存区,如下提示有一个新文件提交,并且提示可以通过git reset命令来进行回退

通过git reset HEAD hello.txt命令回退再查看状态,如下,又回到了上一步的状态 

通过git commit 命令提交到仓库,然后查看状态,又是干净的工作树了

通过git init创建项目示例:

1.git init 命令 在本地目录初始化一个空项目 :

  2.git remote add origin xxxUrl 命令建立远程连接:

3.git fetch origin test 拉取test分支代码

如下,代码拉取成功,但是本地文件没有代码:

这是因为当前是在master分支,而我们拉取的代码是test分支,所以切换分支即可看到本地拉取的代码:

5.分支

分支就像两个平行宇宙,互不干扰,但是在某个时间节点,如果两个平行宇宙重合了,那么我们就需要处理一些问题了。

git branch 查看本地分支

git branch -a /git branch -r 查看远程分支

git branch -d 分支名称   删除本地分支

git push origin --delete 分支名称  删除远程分支(慎用):

git branch test 新建分支
git checkout test 切换到新建的 test 分支

git checkout -b test 新建并切换到test分支是上面两条命令的合并写法

git checkout dev 切换到dev分支

git merge [branch] 合并指定分支到当前分支:

        比如当前在master,输入git merge dev,则是合并dev到master分支,但是这样只是本地合并,合并后就需要通过git push推送到远程才行

git clone -b branchName url 拉取指定分支,如拉取dev分支:git clone -b dev url

git remote update origin --prune  更新分支信息(我在git项目中新建了一个分支,然后在本地git客户端通过git branch -r找不到新建的这个分支,此时通过该命令更新后再次查看远程分支就有了新建的分支了)(10月9日补充)
 

git查看分支从那个分支拉取的

git checkout branch_A

git reflog show branch_A

分支实例

1.多个分支互相隔离例子

如下,在dev分支新建了文件并push后,在dev分支时可以看到该文件

 然后切换到master分支:

如下,已经找不到刚才那个txt文件了 

也可以在git仓库查看:

如下,dev分支有该文件,master分支没有该文件

 

2.分支合并例子

如下, 在master分支上,输入命令git merge dev把dev分支合并到master分支,此时相当于把刚才dev分支新建的txt文件复制到了master分支,在本地文件夹中也可以看到该文件了,但是远程git上没有该文件,需要通过push命令才可以在远程看到

远程上没有该txt文件:

 

 如下,此时就可以在远程git的master分支看到该文件了

3.分支使用场景

现有master分支(主分支)和dev(测试分支)。现在有一个新功能需要开发上线,你可以这么做。

第一种:直接拉取dev分支的代码,在dev上面开发,然后提交代码到dev进行测试,测试无误后把dev分支合并到master分支,完成上线。这么做会有一个问题,如果这一次需求有很多个功能,全部都已经开发完毕,测试完毕准备上线的时候,突然提出其中某一个功能不上线了,此时怎么办呢?只能够把这部分的功能代码注释掉,然后重新提交到dev分支测试,然后再合并到master分支进行上线,这样是可以的,但是显然很麻烦,而且容易出错,所以就有了另外一种方法,如下。

第二种:此时我们以master为基础新建一个分支(就是checkout到master上,然后再新建分支,此时新建的分支的代码就是和master保持一致的),比如我们开发的是支付功能,则我们新建一个WeChatPay分支(微信支付)和一个aliPay分支(支付宝支付),然后在分别在两个分支开发,开发完成后合并到dev分支测试,测试通过,升级的时候再把两个分支分别合并到master分支(方法一是直接把dev分支合并到master)。如果在升级的时候,你的领导突然告诉你,这一次升级只升

WeChatPay,而不升aliPay,此时很好解决,我们直接把WeChatPay合并到master分支,AliPay我们不合并到master分支就可以了,也不会像第一种方法一样需要去注释代码。

6.强制拉取到本地(远程代码覆盖本地代码)

用这一行代码即可:

把分支名称替换为自己的分支名称

git fetch --all && git reset --hard origin/分支名称 && git pull

也可以把上面一行代码分成如下三行执行:

git fetch --all
git reset --hard origin/分支名称
git pull origin master

解释:

git fetch --all:需要将这些更新取回本地,用命令git fetch.

git reset --hard origin/master:撤销本地、暂存区、版本库(用远程服务器的origin/master替换本地、暂存区、版本库)

git pull origin master:git pull来从远程仓库"同步"代码

7.退到/进到 指定版本

一些必要的介绍:

   一个commit对应这一个版本,有一个commit_id,40位的16进制数字,通过SHA1计算得到,不同的文件计算出来的SHA1值不同(有很小的几率相同,可忽略),这样每一个提交都有其独特的id。每提交一个新版本,实际上Git就会把它们自动串成一条时间线。


  在Git中,HEAD表示当前版本,也就是e620a6ff0940a8dff…,HEAD^ 表示上一个版本,HEAD^^ 表示上上一个版本,往上100个版本可以写成HEAD加连续100个^,也可以写成:HEAD~100。

1.通过git log查看commit的sha码(commit_id

        git log - -pretty=oneline :将只会显示提交的commit id号和对应的注释

2.通过git reset --hard [sha码/commit_id或则是 git reset –hard HEAD^  回退或者进到指定版本

3.示例:如下,首先git log 就可以查看到最近提交的版本信息

第一行commit后面的值就是对应的sha码,这个码唯一对应一个版本,现在如果我要回到

“nacos调试”这一次提交的版本,则使用git reset --hard 2558........5d4e2即可

8.强制提交忽略文件到git仓库

平时使用git时都会把项目中的target目录屏蔽掉,但是有时候就是需要用这个目录怎么办呢?

1.方法一

之前我都是直接把.gitignore文件中的/target目录去掉,等把需要的这个target文件提交后再把.gitignore改回来,这样比较麻烦。

2.方法二

强制提交忽略的文件到git。

如下,找到文件位置,使用git add -f 文件名 命令来强制提交该文件到git,

并且以后再次提交的时候就已经可以正常提交,不需要强制提交。

9.回滚分支

9.1回滚本地分支

使用场景:

1.本地写了代码,可能有错误自己不好解决,然后直接回滚到某一个版本,即舍弃掉本地代码。

2.当别人把一些文件上传到服务器,你更新代码之后,出现了本地代码无法运行的情况

...等等

其实就是上面讲的"退到/进到 指定版本"。

1.通过git log查看commit的sha码(commit_id

2.通过git reset --hard [sha码/commit_id或则是 git reset –hard HEAD^  回退或者进到指定版本

9.2回滚远程分支

使用场景:

1.产品上线之后,出现了紧急bug,一时无法修复时,为了保证线上稳定,需要做代码回滚

2.如果你的错误提交已经推送到自己的远程分支了,那么就需要回滚远程分支了。

...等等

首先要回退本地分支:

1.通过git log查看commit的sha码(commit_id

2.通过git reset --hard [sha码/commit_id或则是 git reset –hard HEAD^  回退或者进到指定版本

紧接着强制推送到远程分支:

git push -f origin master # 这里假设只有一个master分支
 

origin就是一个名字,它是在你clone一个托管在Github上代码库时,git为你默认创建的指向这个远程代码库的标签,origin指向的是repository,master只是这个repository中默认创建的第一个branch。当你git push的时候因为origin和master都是默认创建的,所以可以这样省略。

注意:本地分支回滚后,版本将落后远程分支,必须使用强制推送覆盖远程分支,否则无法推送到远程分支
 

 示例:

git运行错误例子

1.错误1

错误提示:fatal: The current branch test has no upstream branch.(该test分支没有上游分支,意思就是说没有和仓库的分支连接起来,通过下面的命令建立连接即可)

运行该命令解决:git push --set-upstream origin test

2.合并时(看起来像错误实际不是错误)

每次合并都提示这个,我一直以为是错误,因为在这里就按不动了,所以每次都是直接关掉这个框框,然后再提交

 后来搜了一下这个就是让你输入commit:

1.按键盘字母 i 进入insert模式

2.修改最上面那行黄色合并信息,可以不修改

3.按键盘左上角"Esc"

4.输入":wq",注意是冒号+wq,按回车键即可

(这个操作就和vim一样)

如果不想输入commit直接就 用3 4步骤即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值