git详解

基础配置

a.首次使用添加身份说明,使用以下两个命令:

1
git config --global user.name "你的昵称"git config --global user.email 邮箱@example.com

b.创建仓库

①在项目文件夹下使用git bash输入

1
git init

②使用他人项目创建仓库

1
git clone 项目url

状态与提交版本

创建完一个仓库后,会赋予这个仓库每一个文件或目录一个状态

如果是自己创建的,状态均为:未被跟踪

当生成一个版本后,未被跟踪的文件就不会在这个版本里

那么他之前的状态便无法追踪

现在我们可以单独地跟踪一个文件或目录

1
git add <name>    //去跟踪一个文件或目录

若一个文件被跟踪,则在这个仓库里会一直被跟踪

解除跟踪:

1
git rm <name>    //解除跟踪

或者:

1
git rm --cache <name>    //解除跟踪且保留在目录中

接下来就可以对跟踪的文件就行修改,修改完后,将它的状态设置为缓存状态

1
git add <file-name>    

取消缓存:

1
gir reset HEAD <name>

提交:

1
git commit

git commit 具体操作

①git commit 进入提交界面,

​ 按” i “键进入输入模式后输入本次提交详情,

​ 然后esc退出编辑模式, 按” : “进入命令栏, 输入”wq”保存并退出.

②git commit -m ‘ 你对提交内容的描述 ‘

③git commit -a

​ 连带未暂存文件一起提交

​ git commit -am ‘提交描述’

④git reset head~ –soft

取消本次提交,使用该命令取消本次提交, 但是首次提交不可撤回

状态总结:

1

查看文件状态:

1
git status
  • 红色:已修改未暂存
  • 绿色:暂存
  • 提交后,则不显示

查询文件具体修改的位置

1
git diff

查看历史提交:

1
git log

以一个图形化的方式呈现:

1
git log --graph

远程仓库

连接远程仓库:

1
git remove add (名字) 远程仓库url

查看连接的远程仓库:

1
git remote

改名:

1
git remote rename 旧名 新名

推送到远程仓库:

1
2
git push 远程仓库名 master     //将本地代码中的master分支推送到远程仓库
git push -u 远程仓库名 master //使用-u命令推送一次,后续的推送即可简写为git push

通过ssh鉴权:

进入到.ssh目录下,执行ssh-keygen生成密钥

1
ssh-keygen -t rsa -b 4096 -C (邮箱)      //-t选择生成密钥的算法,-b选择生成的大小,-C添加评论(Github推荐评论为邮箱)

后输入这对密钥的名字(eg.test),在ssh目录下会自动生成test.pub(公钥)和test(私钥)

复制公钥,添加到Github

分支

每一个提交生成一个新版本的同时,其实会生成一个提交对象,每个提交对象都有一个独一无二的哈希值。

分支就是一个包含这个哈希值的一个文件,可简单理解为指向一个提交对象的指针,所以我们可以在一个提交对象上新建多个分支。

在我们初始化本地仓库时,就已经创建了一个master分支,当每次进行一个提交的时候,分支也跟着提交对象而向前移动

操作分支:

  1. 查看分支:

    1
    git log     //HEAD->当前所处分支
    1
    git status  
  2. 创建分支

    1
    git branch (分支名)
  3. 切换分支

    1
    git checkout (分支名)
    1
    git checkout -b (分支名)               //新建并切换到新分支

分支合并

无冲突合并

在合并至的分支使用

(master)

1
git merge (分支1)                   //当前所处master分支,合并了分支1上的修改

分支冲突 merge conflict

将 分支2 合并到 master分支 时, 与 分支1 冲突了. 原因是 分支1 和 分支2 修改了同一处内容

git status 查看哪里有冲突

vi 到冲突文件中, 选择一个分支的内容保留下来, 保存退出

git add 文件名

git commit -m ‘提交描述’

git log –all –graph 查看合并状态

推拉与远程跟踪分支

推送

1
git push 仓库名 分支名

或者

1
git push -u 仓库名 分支名

第一次使用 -u 指定推送目标后, 此后可直接使用git push

拉取

1
git fetch           //拉取分支

远程分支本地化:

1
git checkout 远程分支
1
git checkout -b 本地分支名 远程分支
1
git checkout --track 远程分支

版本回退

1. reset

此种方式不是很推荐,通过reset的方式,把head指针指向之前的某次提交,reset之后,后面的版本就找不到了。例如我们在开发种一共提交了四次分别是A、B、C、D,此时我们发现操作失误需要回退到B,则使用reset之后C、D就不再存在与时间线上了。

1
git reset --hard commit id

reset回退操作步骤:

  1. 使用git log查找到所需要回退到的版本号,即提交记录的commit id;例如:576223db1ee100a79b4f82d6713cef700d723018;

  2. 在客户端执行如下命令(执行前,先将本地代码切换到对应分支)

    1
    git reset --hard 576223db1ee100a79b4f82d6713cef700d723018`
  3. 强制push到对应的远程分支git push -f -u origin master或者git push -f,此时如果用git push会报错,因为我们本地库HEAD指向的版本比远程库的要旧;

此时,版本回退完成。

此方法不适用于多人共同创作一个项目的情景

2. revert

这种方式不会把版本往前回退,而是生成一个新的版本。所以,你只需要让别人更新一下代码就可以了,你之前操作的提交记录也会被保留下来。例如我们在开发种一共提交了四次分别是A、B、C、D,此时我们发现操作失误需要回退到B,则使用revert之后会生成一个E版本。

1
git revert -n commit id

revert回退操作步骤:

  1. 使用git log查找到所需要回退到的版本号,即提交记录的commit id;例如:a53a22f1e8b7ed0c7a9355e8563d234b5b99dd53;

  2. 在客户端执行如下命令git revert -n a53a22f1e8b7ed0c7a9355e8563d234b5b99dd53;

  3. 使用git commit -m ‘版本回退’进行提交;

  4. git push同步推送到远程仓库即可;

恢复回退

若这个时候突然又发现不需要回退了,刚才那些消失的代码又要重新找回来了,则可以恢复回退

  1. 我们可以通过git reflog查看本地的操作历史,找到对应的commit id

  2. 然后再使用git reset --hard commit id就回到之前的操作了