git学习笔记(git常用命令记录)

目录

一、git的特点

二、git本地仓库

1 初始化空的git版本仓库( .git/ 目录)

2 版本创建

3 查看版本记录

4 查看操作记录

5 版本回退

6 工作区与暂存区与版本库

7 撤销修改

8 对比文件不同

9 删除文件

三、git分支

1 分支基础命令

2 解决分支冲突

3 git分支管理策略

4 修复bug的临时分支

四、github远程仓库

1 添加ssh账户

2 克隆项目

3 推送代码

4 跟踪远程

5 拉取代码


一、git的特点

  • 版本控制:可以解决多人同时开发的代码问题,也可以解决找回历史代码的问题。
  • 分布式:git是分布式版本控制系统,同一个git仓库,可以分布到不同的机器上。首先找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个"服务器"仓库克降一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。可以自已搭建这台服务器,也可以使用GitHub网站。

二、git本地仓库

安装git:

sudo apt-get install git

使用 cd 命令进入工作目录。

1 初始化空的git版本仓库( .git/ 目录)

git init

之后就可以使用git来管理你的代码啦。

注:使用 .gitignore 文件,可忽略目录中不想管理的文件。

2 版本创建

编辑完文件后,把修改文件添加到暂存区:

git add <文件>

创建版本:

git commit -m '版本信息'

3 查看版本记录

git log

该指令会在下方依次按行显示版本序列号、作者、日期、版本信息

例如:

commit 5855feb528d94fb1e1c894904351e8d7ad76a6cc    #版本序列号
Author: username <email>                           #作者
Date:   Fri Nov 10 08:00:00 2020+0800              #日期

    版本1                                          #版本信息

若要以简短形式显示版本记录,添加如下参数:

git log --pretty=oneline

查看分支图:

git log --graph --pretty=oneline

4 查看操作记录

git reflog

5 版本回退

后一个版本记录了相对于前一个版本做了哪些修改,故后一个版本依赖于前一个版本。

HEAD可以看成一个指向当前版本的一个指针,HEAD表示当前最新版本。

版本回退有两种表示方式:

  1. HEAD^表示当前版本的前一个版本;HEAD^^表示当前版本的前两个版本。
  2. HEAD~1表示当前版本的前一个版本,HEAD~10表示当前版本的前十个版本。
git reset --hard HEAD^        #回退到前一个版本

git reset --hard HEAD~n       #回退到前n个版本

回退到之前版本后,后面的版本并不会被删除,可使用版本号恢复到后面的版本。版本序列号可以使用以下命令查看

git log        #查看版本记录

git reflog     #查看之前的操作记录,包含更新版本的序列号

恢复后面的版本(需要版本号):

git reset --hard <版本号>

6 工作区与暂存区与版本库

  • 编辑文件的目录即是工作区,但是目录中的隐藏目录 .git/ 版本库,而非工作区。
  • 版本库里包含了暂存区,第一个分支master,指向master的指针HEAD等。

如上图所示,把文件往git版本库里添加分两步:

1、把工作区中文件的修改添加到暂存区:

git add <文件>

2、把暂存区内容一次性提交到当前分支:

git commit -m '版本信息'

查看当前工作树状态:

git status

此命令可查看工作区有无修改,git会提醒你有无文件需要从工作区提交至暂存区。

注意,在管理修改时,

  • git只会提交暂存区的修改来创建版本。
  • 因此,提交版本之前先使用 git add 将文件添加到暂存区。

7 撤销修改

1、撤销工作区改动(丢弃工作区的修改)。

git checkout -- <文件>

2、已经将不合适的修改添加至暂存区:进行暂存区撤销(撤销暂存区的修改,重新放回工作区)后进行工作区撤销

git reset HEAD <文件>        #暂存区撤销

git checkout -- <文件>       #工作区撤销

3、已经将不合适的修改提交至版本库:进行版本库撤销(版本回退)后进行暂存区撤销再进行工作区撤销

git reset --hard <版本号>    #版本回退

git reset HEAD <文件>        #暂存区撤销

git checkout -- <文件>       #工作区撤销

8 对比文件不同

对比同一文件工作区中与在当前版本库中的不同:

git diff HEAD -- code.txt        #code.txt是想要比较的文件

若输出以下内容:

diff --git a/code.txt b/code.txt
index 66f9219..324317f100644
--- a/code.txt
+++ b/code.txt
@@ -2,3 +2,4 @@ this is the first line
 this is the second line
 this is the third line
 this is the forth line
+the new line

其中,

  • “-”标注代表此内容是a版本(HEAD当前版本)中此文件多出的内容;
  • “+”标注代表此内容是b(工作区)中此文件多出的内容。

因此,输出内容说明工作区中的code.txt文件比当前版本库中code.txt文件多了一行: the new line 

对比同一文件两个版本之间的不同:

git diff HEAD HEAD^ -- code.txt     #code.txt是想要比较的文件

若输出内容如下:

diff --git a/code.txt b/code.txt
index 66f9219..01e1274 100644
--- a/code.txt
+++ b/code.txt
@@ -1,4 +1,3 @@
 this is the first line
 this is the second line
 this is the third line
-this is the forth line

输出内容的判断方法同上:

  • “-”标注代表此内容是a版本(HEAD版本,命令中第一个列出的版本)中多出的内容;
  • “+”标注代表此内容b版本(HEAD^版本,命令中第二个列出的版本)中多出的内容。

9 删除文件

编辑、删除文件都是对工作区的改动。

修改后查看工作区与版本库不同:

git status

撤销修改:

git checkout -- <文件>

将删除某文件的修改存入暂存区:

git rm <文件>

提交到版本库:

git commit -m '版本内容'

注意:若删除的文件未添加到暂存区,则无法跟踪此文件。

三、git分支

一般:

  • master分支:用于保存发布的项目代码;
  • dev分支:用于保存开发过程中的代码;
  • 各分支相互独立,我们将分支的交汇称为分支的合并。

刚开始,指针HEAD指向指针master,master指向最新的提交:

此时,创建新分支dev,则只是新增一个dev指针,指针HEAD指向指针dev,dev指向master相同的提交,因此git创建分支的速度非常快(fast forward策略)。

此后 ,对工作区的修改与提交仅针对dev分支,master指针不变:

把master指向dev当前提交即可合并:

之后可以删除dev分支,相当于删除这个dev指针,删除后分支图上不再有dev分支的记录

1 分支基础命令

快速合并:直接把master指向dev的当前提交,所以合并速度非常快。

查看分支:

git branch

创建新分支并切换:

git checkout -b <分支名>

创建分支:

git branch <分支名>

切换分支:

git checkout <分支名>

把dev分支合并到master主分支,使用快速合并(fast-forward)策略,即直接将HEAD与master指针指向dev的当前提交:

git merge dev

删除分支:

git branch -d <分支名>

2 解决分支冲突

两个分支上对同一文件做出了不同的修改提交,此时无法快速合并,git会尝试将各自的修改合并起来,这种合并可能产生冲突。此时需要手动修改冲突的文件。

查看冲突的文件:

git status

手动修改冲突的文件后提交:

git add <文件>

git commit -m '版本信息'

查看分支图:

git log --graph --pretty=oneline

解决分支冲突的分支示意图如下:

解决冲突后可以删除不需要的分支。

3 git分支管理策略

两个分支的不同修改是关于不同文件的,则合并时会使用recursive策略而非fast forward策略。

recursive策略,此策略在合并后会进行一次新的提交,将各自的不同的文件合并在一个版本中。

也可手动禁止以fast forward策略合并,这样git会帮你做一次提交。

git merge --no-ff -m '版本信息'

总结:

  • fast forward策略:直接把master指向dev的当前提交,不会有新的提交信息,这是默认的合并策略;
  • recursive策略:会再进行一次新的提交。

4 修复bug的临时分支

需要紧急修复一个bug,但在dev分支上进行的工作还未完成,不能提交。

使用stash功能,储存工作现场,之后可恢复现场继续工作:

git stash

接着可去修复Bug。

在需要修复Bug的分支上创建临时分支,修复Bug,做一次提交:

git checkout -b <分支名>

git add <文件>

git commit -m '版本信息'

回到master分支并完成合并(禁用fast forward策略):

注意:

禁用ff策略以保留修复bug的这次提交信息,否则后续若删除此临时分支则分支图上不会有记录。

git merge --no-ff -m '版本信息'

删除修复Bug分支,回到dev分支,列出保存的工作现场:

git stash list

回到工作现场:

git stash pop

四、github远程仓库

1 添加ssh账户

1、编辑 .gitconfig 文件,修改邮箱为注册github的邮箱,填写用户名。

:使用 git log 命令时输出的用户名与邮箱就是从这里来的。

2、生成ssh密钥:

ssh-keygen -t rsa -C "email"    #-t后面结加密方式;-C后面接邮箱地址

3、进入生成的 .ssh/ 目录,里面有公钥 id_rsa.pub 与私钥 id_rsa

4、将公钥内容复制到github账户的"SSH keys"界面即可。

2 克隆项目

git clone <clone with SSH>

3 推送代码

git push origin 本地分支名称        #origin代表远程服务器

4 跟踪远程

git braneh --set-upstream-to-origin/远程分支名称 本地分支名称

注意:跟踪远程后,

1、可以显示本地分支与远程分支的差异:

git status

2、推送代码到远程可直接使用:

git push

5 拉取代码

git pull origin 远程分支名称 

  • 35
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值