git指令

设置签名

  • 项目级别/仓库级别 :仅在当前本地库范围内有效

    • git config user.name luoji_pro

    • git config user.email luoji_pro@foxmail.com

    • 信息保存位置:./.git/config文件 可以用cat命令打开

  • 系统用户级别:登录当前操作系统的用户范围

    • 在上面的指令中加上 –global
    • 信息保存位置: ~/.gitconfig 文件

git结构

  • 工作区:写代码的地方。通过git add指令将新建/修改添加到暂存区。
  • 暂存区:临时存储的地方。通过git commit指令将新建/修改提交到本地库。
  • 本地库:存放历史版本的地方。

PS. 也可以直接将新建/修改从工作区提交到本地库,但这么做就不能再撤销了。


提交 命令

git status

  • 查看工作区,暂存区的状态,如果没有任何可以提交的文件,就使用git add 命令提交文件到暂存区。

git add

  • 将工作区的新建/修改添加到暂存区 ,如果后悔了,可以使用git rm –cached 命令,将file从暂存区移除。

git commit

  • 提交命令,将暂存区的内容添加到本地库,直接使用则会出现:please enter the commit message for you changes.
    • 这是让添加注释,此时git自动调用vim编辑器。按i键进入编辑模式。编辑完后,按ESC,然后:wq后按回车,退出vim编辑器。然后commit命令执行完成。
    • 也可以直接使用git commit -m “在这里直接输入注释信息” 来直接输入注释,不需要再进入vim编辑器了。

版本控制 命令

git log

  • 查看日志。 显示的内容非常详细。
    • 直接使用时,多屏显示控制方式: 空格为向下翻页,b向上翻页,q退出。
  • 可以使用git log –pretty=oneline指令,查看简洁的日志。显示出每次操作的哈希值和操作内容。
  • 可以使用git log –oneline指令,和上一个指令相比,只显示部分的哈希值,更加简洁。
  • 可以使用git reflog指令,和上一个指令相比,加入了一个指针数据,显示移动到相应操作所需移动的指针的次数。即: HEAD@{移动到当前版本需要的步数}
  • 查看当前HEAD指针所在位置:git reset –hard HEAD

版本前进/后退

  1. 基于索引值操作[推荐]
  • git reset –hard [索引值] 索引值就是每条记录的哈希值,可以是全部索引值,也可以是局部索引值。
  1. 使用^符号
  • 只能后退,不能前进。
  • git reset –hard^ 有几个^符号,就后退几个版本,向后退两个,就^^,向后退n个,就n个^。
  1. 使用~符号
  • 只能后退,不能前进。
  • git reset –hard HEAD~n 表示后退n步。

reset命令的三个参数对比

  • –soft 参数
    • 仅仅移动本地库HEAD指针
  • – mixed 参数
    • 在本地库移动HEAD指针
    • 重置暂存区
  • – hard 参数
    • 在本地库移动HEAD指针
    • 重置暂存区
    • 重置工作区

比较文件 命令

  • 使用 git diff 来进行比较。

    • 将工作区中的文件和暂存区进行比较。
    • 如果不带文件名,则比较所有文件。
  • 使用 git diff [本地库中的历史版本] [文件名]

    • 将工作区中的文件与本地库历史记录比较。

分支管理

  • 什么是分支?

​ 在版本控制过程中,使用多条线同时推进多个任务。最初有一条主干分支master,后续创建的分支从master分支复制出去。

  • 分支的好处
    • 可以同时推进多个功能的开发,提高开发效率。
    • 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响,各分支相互独立,失败的分支删除掉重新开始就可以了。

分支管理 指令

  • 查看已有分支
  • git branch -v
  • 创建分支
  • git branch <分支名>
  • 切换分支
  • git checkout <分支名>
  • 合并分支
    1. 第一步,切换到接受合并的分支上 git checkout <接受合并的分支名>
    2. 第二步, 执行合并操作,使用 git merge <另一个分支名(即被合并的有新内容的分支名)> 指令 。
  • 解决冲突

    ​ 如果两个分支同时对同一个文件的同一个地方做了修改,此时如果再合并的话,系统不知道该舍弃哪一个,此时就会自动合并失败(Automatic merge failed).

  • 冲突的表现:在文件内容里,出现两个分支的内容。
  • 冲突的解决:
    1. 第一步,手动去编辑文件修改(如使用vim指令),并删除特殊符号;
    2. 第二步,改完后,保存退出;
    3. 第三步,git add
    4. 第四步,git commit -m “日志信息” 此时,commit后面不能带文件名。

远程库操作

  • 新建别名 命令

    ​ 与远程库交互时,需要知道远程库的地址,如https://gitee.com/wumeidewunv/test_push.git

    但是,这个地址太长,不可能记住,所以可以用git remote指令将该地址重新命名。

    ​ 该指令举例: git remote add origin https://gitee.com/wumeidewunv/test_push.git

    • 该指令中: origin为自定义的地址别名,后面跟的是需要被重命名的地址。
    • git remote -v 查看别名与地址的对应关系。
  • 克隆有三个效果

    1. 完整地把远程库内容下载到本地
    2. 创建origin 远程地址别名
    3. 初始化本地库
  • 远程拉取

    • git pull 命令
      • pull相当于是 fetch 和 merge操作的合并,即pull = fetch + merge。
      • git fetch [远程库地址别名] [远程分支名] 将该远程库中该分支的内容拉取到本地。
      • git merge [远程库地址别名/远程分支名] 将刚才fetch到本地的内容与本地的分支合并。
      • 使用git pull 命令:git pull [远程库地址别名] [远程分支名] 直接一下子做了上面的两个操作。
  • 解决冲突

    冲突原因:如果两个人在各自本地对同一文件的同一位置都做出了各自的修改,并要将各自的修改提交到远程 库,此时,后提交的会与先提交的产生冲突。即如果不是基于远程库最新版所做的修改,则该修改不能够被推送到远程库,必须先从远程库拉取。拉取下来如果进入冲突状态,则按照“分支冲突解决”操作解决即可。


联机协作

用户协作

​   如果想让一个用户可以操作自己的远程库,可以进入自己的远程库后,通过settings→Manage access→invite a collaborator来邀请其他用户。被邀请人登录自己的账号后,在未读信息那里可以看到该邀请信息,然后点击进去并同意即可。

跨团队协作

   如果两个远程库想要联结,用fork。一般是将别人的远程库fork到自己这里,然后clone下来,然后在本地修改后再推送到自己的远程库,然后再申请合并到原来的别人的远程库;主人同意合并后,就可以将修改合并过去了。步骤如下:

  1. 登录想要复制别人的库的人的账号;
  2. 利用该账号进入目标仓库,点击“fork”;
  3. fork完成后,将自己的库clone到本地,然后进行修改操作,然后再push到自己的远程库;
  4. Pull request:进入自己的那个本地库,点击 pull request→new pull request→create pull request,然后消息编辑界面,来编辑想给原主人说的话,编辑完成后,点击“create pull request”即可;
  5. 原主人登录账号,进入那个远程库,此时可以看到pull request 那里有信息,点击进去,可以看到刚才那条信息,点击进去看到详细修改。点击commits,可以看到本次的提交,点击 files changed,可以看到修改的地方,对代码进行审核,审核没问题,可以回到conversation,点击merge pull request进行代码的合并,点击后,可以编辑合并信息,完成后点击confirm merge,则完成了自己远程库的修改。之后将该远程库pull到本地,就完成了该次跨团队协作。

参考视频

本文档为这个视频的笔记。

-------------本文结束感谢您的阅读-------------
0%