Git 必备修炼技

Git 必备修炼技

目录

  • Git 必备修炼技
    • 基本命令
      • 配置git环境 git config --global
        • 创建本地空仓库:git init
        • 新建文件添加到本地仓库:git add、git commit -m
        • 改写提交:git commit --amend
        • 查看历史提交日志:git log
        • 回滚代码仓库:git reset --hard
        • 查看提交之后文件是否做了改动:git status
      • 工作区与缓存区
        • 修改缓存区内容:git add、git commit -m
        • 将改动文件添加到缓存区:git add[
        • 将所有改动文件添加到缓存区:git add --all、git add .
        • 将文件撤销回到最近一次修改的状态:git checkout -- file
        • 查看单个文件可回滚版本:git log filename
        • 删除文件:git rm
        • 查看提交历史:git reflog
        • git rm后恢复文件:git rm、git reset、git checkout
        • git基本组成框架
      • 分支
        • git创建分支:git branch、git checkout
        • git切换分支:git checkout
        • git合并分支:git merge
        • git查看分支:git branch -a
        • git删除本地分支:git branch -D
        • git删除远程分支:git push origin --delete
        • 在开发中git分支的重要性
    • Git 连接 gitee 教程
      • gitee远程仓库的配置
        • 1、首先在本地创建ssh key;
        • 2、复制生成的公钥
        • 3、回到gitee网址配置秘钥
        • 4、本地创建一个gitee本地仓库
        • 5、连接gitee远程仓库
      • 把本地仓库的数据推送到远程仓库
      • 从gitee远程仓库克隆数据到本地
      • 从gitee远程仓库把数据拉取到本地(不是克隆)

最近“闲”得没事儿,捣鼓了一下Git,一下子入坑!!特来分享!

\quad -
\quad -

前面一部分是Git得基础知识,后面一部分是实际使用时需要的步骤及其命令。(初级版) 下面开始正文!
\quad -
\quad -

除了git还有svn、cvs这样的版本控制系统,它们的区别在于一个是分布式一个是集中式。集中式就是svn和csv这样的版本控制系统,分布式是git。

  • 集中式的版本控制系统每次在写代码时都需要从服务器中拉取一份下来,并且如果服务器丢失了,那么所有的就都丢失了,你本机客户端仅保存当前的版本信息,换句话说,集中式就是把代码放在一个服务器上集中管理,你的所有回滚等操作都需要服务器的支持。
  • 分布式的区别在于,每个人的电脑都是服务器,当你从主仓库拉取一份代码下来后,你的电脑就是服务器,无需担心主仓库被删或者找不到的情况,你可以自由在本地回滚和提交,当你想把自己的代码提交到主仓库时,只需要合并推送到主仓库就可以了,同时你可以把自己的代码新建一份仓库分享给其它人。

基本命令

配置git环境 git config --global

git config --global

config:参数是用来配置git环境的
–global:长命令表示配置整个git环境

初次使用git需要设置你的用户名以及邮箱,这将作为当前机器git的标识,如果你用它来下载远程仓库一些需要登录权限的仓库会要求登录,git默认使用配置邮箱以及用户名登入,但会要求你手动输入密码

用户名配置:user代表用户,.name代表配置用户的名称

git config --global user.name "你的用户名"

邮箱配置:user代表用户,.email代表配置用户的邮箱

git config --global user.email "你的邮箱"

不配置也行,当遇到要求登录权限的远程仓库会让你在手动输入用户名、邮箱、以及密码。

创建本地空仓库:git init

init:初始化当前目录为仓库,初始化后会自动将当前仓库设置为master

创建本地仓库的条件是需要一个空目录,然后在空目录中初始化你的项目。

mkdir test
cd test
git init

初始化后会生成git的配置文件目录,进入目录后可以看到它的相关配置文件。

新建文件添加到本地仓库:git add、git commit -m

  • add:将文件添加到缓存区
  • commit:提交到本地仓库

使用git add命令将文件添加到本地仓库的提交缓存

git add main.cpp

这个时候还不算添加到了本地仓库,我们还需要使用git commit命令为其添加修改的描述信息。在使用git commit时我们需要简单描述一下我们做了什么。

我们需要使用-m命令来简写描述我们的信息,如果不使用-m,会调用终端的注释编辑器让你输入描述信息。

git commit -m "add first file"

git commit会为我们生成40位的哈希值,用于作为id,并把刚刚用git add添加到提交缓存区里的文件提交到本地仓库中,便于我们回滚,至此,这个文件就已经添加到本地仓库中了,同时本地仓库也迭代了一个版本。

改写提交:git commit --amend

--amend:重写上一次的提交信息

就像刚刚的列子里一样,我们提交了仓库,但是发现注释写错了,我们可以使用 --amend长命令选项来改写提交:

git commit --amend

输入上面的命令后会进入编辑器界面。编辑界面是vim语法。

查看历史提交日志:git log

正如刚刚改写提交的,想要确定是否改写成功,我们可以使用git log查看一下

git log

Git 必备修炼技_第1张图片

  • 第一行的commit是哈希算法算出的id,分布式是没有一个主版本号的,它们都是用id来做标志的,同时用master作为主仓库,其它的分支怎么迭代都不会影响到master。
  • 目前我们的仓库就是master,因为我们没有拉取分支是直接用git init创建的,就是master。
  • 后面的head是指向的意思,表示这次提交到哪儿,head->master代表这次提交到master主仓库,如果是head->分支仓库则代表提交到分支仓库;
  • Author是提交者是谁的意思,显示格式是:用户名 <邮箱>
  • Date的意思是提交时间;
  • 最下面是注释。

回滚代码仓库:git reset --hard

  • reset参数是重置命
  • –hard是重置代码仓库版本

有三种模式:–soft 、–mixed以及–hard是三个恢复等级。

  • 使用–soft就仅仅将头指针恢复,已经add的暂存区以及工作空间的所有东西都不变。
  • 如果使用–mixed,就将头恢复掉,已经add的暂存区也会丢失掉,工作空间的代码什么的是不变的。
  • 如果使用–hard,那么一切就全都恢复了,头变,add的暂存区消失,代码什么的也恢复到以前状态。

1、回滚到指定历史版本

git reset --hard 50a327e4190eb90f17f1abfa836e3aa969355f23  # 哈希id  git log 获取

2、回滚当前仓库指向的版本

git reset --hard HEAD^

^代表上一个版本的意思,HEAD代表当前仓库的指向,当前HEAD指向master,就代表回滚到master上一次提交的版本。

git reset --hard HEAD~3

后面的3,代表以当前版本为基数,回滚多少次。HEAD3代表回滚master前三个版本。

查看提交之后文件是否做了改动:git status

git status

工作区与缓存区

在git下有一个概念是缓存区,这是其它集中式版本控制系统没有的

  • 工作区:工作区就是你当前的工作目录
  • 缓存区:这里存放了你使用git add命令提交的文件描述信息,它位于.git目录下的index文件中

这些文件中存储了我们一些提交的缓存数据,git会解析它们,HEAD文件就是指向当前的仓库。最后使用git commit提交时git会提交到当前仓库中,当前的工作区也就成为了最新一次提交的仓库版本。

修改缓存区内容:git add、git commit -m

比如我们使用git add添加了一个名为min.c的文件,但是还没有提交的时候我们修改了它的内容,修改完成之后在提交会发现内容并不是我们第二次修改的内容。

当我们使用git add添加到缓存区的内容后,我们在修改这个文件时,它跟缓冲区内容是没有任何关系的!我们使用git commit提交的时,它只会提交缓存区内容!

如果想提交第二次修改,我们只需要在git add一次,然后在使用git commit提交就可以了,git会自动帮我们合并提交。

将改动文件添加到缓存区:git add[

](https://blog.csdn.net/bjbz_cxy/article/details/116703787)
平时我们可能写代码的时候不可能保证只改动了一个文件,我们切来切去最后都不知道自己改了哪些文件,为了保证所有的文件都能被准确提交,我们可以使用git add我们确定修改的文件,当git add后在使用status查看一下状态,看看是否有遗漏没有提交的文件。

将所有改动文件添加到缓存区:git add --all、git add .

如果你实在不确信哪些文件是改动过的,你只需要使用git add --all

git add --all

这个命令会将当前目录下包括子目录下所有改动的文件提交到暂存区,注意只包括改动的文件,不改动的不会放到缓存区。这个命令还会把删除的文件也提交进去。

如你在本地删除了min.c 这个命令会把删除信息也记录进去,然后在提交的时候把仓库里对应的min.c也删除掉,也就是说你在本地做的删除操作会被记录,提交仓库时会删除同样的文件,如果不想删除文件,可以使用git add .,注意后面有一个“.”点的符号,这个命令跟git add --all一样,但是不会记录删除操作

最后别忘记使用git commit提交到仓库中

将文件撤销回到最近一次修改的状态:git checkout – file

checkout:切换参数,通常用来切换分支仓库

当我们在工作中修改了一个文件,猛然间发现内容好像改的不对,想重新修改,这个时又不知道自己改了什么代码,想撤销修改,有一个最简单的方法,就是git checkout – file,注意中间要有“–”,checkout这个命令是切换分支的功能,关于它我们后面在细说,你现在只需要知道这个命令加上“–”可以用来将文件切换到最近一次的状态

注意这个恢复只能恢复到上一次提交的状态,如你刚提交了这个文件到仓库,随后你修改了它,那么使用这个命令只会回到刚刚提交后的那个状态里,不能回到你还没有提交,但修改的状态中。

查看单个文件可回滚版本:git log filename

当我们想回滚指定文件到指定版本时,需要查看该文件有多少个版本可以回滚时,可以使用git log filename命令

git log test.c

再使用git reset命令将其回滚就可用了,命令格式如下:

git reset 1a1e91bf37add6c3914ebf20428efc0a7cea33f3 min.c

回退完成之后想要再次提交可以使用git add和git commit提交到本地仓库中,即可更新当前工作环境,让当前文件保持最新。

git add min.c
git commit -m "new"

删除文件:git rm

如果我们使用普通的命令,rm删除文件,git状态会提示你删除了文件,需要使用add重新提交一次。

也可以使用git rm删除文件,但是也需要使用git commit提交一次

查看提交历史:git reflog

git reflog可以查看当前版本库的提交历史,凡是对仓库版本进行迭代的都会出现在这个里面,包括你回滚版本都会出现在这个历史中。

git rm后恢复文件:git rm、git reset、git checkout

此方法仅限git rm,因为git rm会先将文件放入缓存区,且没有使用commit提交的情况下。

git rm d.c  # 首先使用git rm删除一个文件
git reset  # 再使用git reset重置所有缓存区操作
git checkout d.c   # 重置完成之后在使用git checkout命令将文件取消操作

git基本组成框架

  • Workspace:开发者工作区,也就是你当前写代码的目录,它一般保持的是最新仓库代码。
  • Index / Stage:暂存区/缓存区,最早叫Stage,现在新版本已经改成index,位于.git目录中,它用来存放临时动作,比如我们做了git add或者git rm,都是把文件提交到缓存区,这是可以撤销的,然后在通过git commit将缓存区的内容提交到本地仓库
  • Repository:仓库区(或本地仓库),是仓库代码,你所有的提交都在这里,git会保存好每一个历史版本,存放在仓库区,它可以是服务端的也可以是本地的,因为在分布式中,任何人都可以是主仓库。
  • Remote:远程仓库,只能是别的电脑上的仓库,即服务器仓库。

分支

git创建分支:git branch、git checkout

使用git checkout -b参数来创建一个分支,创建完成分支后会自动切换过去

git checkout -b dev

然后我们在使用branch来查看当前属于哪个分支,也就是查看HEAD的指向

git branch

git checkout -b等价于

git branch dev
git checkout dev
  • git branch 如果后面跟着名字则会创建分支,但不会切换
  • git checkout 后面如果是分支名称则切换过去

git切换分支:git checkout

当我们想切换分支可以使用git checkout来切换,如刚刚我们创建了一个分支dev并切换了过去,现在切换回master

git checkout master

git checkout的作用是检出,如果是文件的话,会放弃对文件的缓存区操作,但是要使用reset重置一下变更才行。如果是分支的话会切换过去。

git合并分支:git merge

当我们新建分支并做完工作之后,想要把分支提交至master,只需要切换到master仓库,并执行git merge 分支名就可以了

如我们在分支中新建了一个f.c和test.c的文件,然后在使用git checkout master切换到master,在使用git merge dev将其合并。

git查看分支:git branch -a

如果要查看当前所有分支可以使用:git branch -a; HEAD指向当前分支

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

git删除本地分支:git branch -D

git branch -D 分支名

git删除远程分支:git push origin --delete

注意这里的远程分支名不需要加origin,输入分支名就可以了。

git push origin --delete 远程分支名

在开发中git分支的重要性

当我们在开发中,无论做什么操作都建议使用分支,因为在团队开发中,master只有一个,合作开发里任何人都可以从master里拉取代码,拉取时master后创建分支,分支名改为你要做的操作,比如修改某某文件,修改什么什么bug,单词以下划线做分割,然后在提交一个版本

分支名必须简洁,和标题一样,提交的commit在简单描述一下就可以了。

如我们的master中有个bug,是内存泄漏。我们可以常见一个分支名为Memory_Leak,然后在commit里简单描述一下修复了哪个模块的内存泄漏,不要写修复了什么什么代码,什么什么问题导致的,只需要简单描述一下就可以了。

一般情况下,我们都是拉取master后,想要修改功能或者添加功能,都是创建分支,在分支里修改不影响master,如果修改错了代码或者误删之类的,在从master上拉取一份就可以了。

Git 连接 gitee 教程

gitee远程仓库的配置

1、首先在本地创建ssh key;

ssh-keygen -t rsa -C "[email protected]"

后面的邮箱是你在gitee上注册的邮箱,之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。
Git 必备修炼技_第2张图片

2、复制生成的公钥

成功的话会在c/user/用户/下生成.ssh文件夹,进去,打开id_rsa.pub,复制里面的key。
Git 必备修炼技_第3张图片

其中,

  • id_rsa 秘钥 别告诉别人
  • id_rsa.pub 公钥

3、回到gitee网址配置秘钥

第一步,点击右上角下拉列表中的Settings(账户配置)
第二步,左边选择SSH公钥
第三步,title随便填,Key粘贴在你电脑上id_rsa.pub文件中生成的key,然后点击确定
Git 必备修炼技_第4张图片

添加成功后,会发生邮件给你这个邮箱。

4、本地创建一个gitee本地仓库

相关命令:

git init
git add
git commit 

5、连接gitee远程仓库

本地创建一个git仓库,又想在gitee创建一个远程仓库,并且使两个仓库进行远程同步,这样gitee上的仓库就可以作为备份,又可以让其他人通过该仓库来协作。

1)先在gitee,创建一个远程仓库

2)、本地仓库和远程仓库进行关联
复制仓库地址
Git 必备修炼技_第5张图片

命令:

git remote add origin 仓库地址

把本地仓库的数据推送到远程仓库

第一次使用push的时候加上-u,以后可不加

git push -u origin 分支名

然后查看远程仓库,发现推送成功了

报错的话,加 -f,强制上传
Git 必备修炼技_第6张图片

git push -u origin master -f   #-f强制上传

从gitee远程仓库克隆数据到本地

1、先在gitee找到需要克隆的仓库,找到地址并克隆。(同刚刚的复制仓库地址)

2、本地执行clone命令

git clone 复制的地址

3、克隆指定某个分支

注意:在clone时默认是把当前地址里面的所有分支全部clone下来,但是只有master会显示

git clone -b + 分支 + 地址

从gitee远程仓库把数据拉取到本地(不是克隆)

1、先在gitee上添加文件

2、若要把gitee上新建的文件拉取到本地

git pull

你可能感兴趣的:(git,github)