Git使用指南(高频命令详解)

从零开始助你高效使用git。关注不迷路哦~

一、Git是什么

Git是免费、开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理

fig-git
- 版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一 - 以毕业论文为例,版本控制就是这些论文变更的管理,学会了它就可以避免今后大家写论文出现以下这种情况:
git-essay
  • 分布式版本控制系统,就是远程仓库同步所有版本信息到本地的每个用户。用户在本地就可以查看所有的历史版本信息。当别的用户更改过项目时,用户可以远程更新一下,就能看到最新版的项目。

git四大工作区

  • Workspace:你电脑本地看到的文件和目录,在Git的版本控制下,构成了工作区
  • Index/Stage暂存区,一般存放在 .git目录下,即.git/index,它又叫待提交更新区,用于临时存放你未提交的改动。比如,你执行git add,这些改动就添加到这个区域啦。
  • Repository本地仓库,你执行git clone 地址,就是把远程仓库克隆到本地仓库。它是一个存放在本地的版本库,其中HEAD指向最新放入仓库的版本。当你执行git commit,文件改动就到本地仓库来了~
  • Remote远程仓库,就是类似github,码云等网站所提供的仓库,可以理解为远程数据交换的仓库~

git工作流程

fig-git工作原理
  • 从远程仓库拉取文件代码回来;
  • 在工作目录,增删改查文件;
  • 把改动的文件放入暂存区;
  • 将暂存区的文件提交本地仓库;
  • 将本地仓库的文件推送到远程仓库;

二、Git常用命令

fig-git命令大致流程

下载安装git

https://git-scm.com/downloads
配置git:安装完 Git 之后,要做的第一件事就是设置你的用户名和邮件地址。 这一点很重要,因为每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改

git config --global user.name "John Doe"
git config --global user.email "johndoe@example.com"

创建新仓库

1)创建新文件夹
2)在该文件夹下右键打开git bash here,然后执行git init以创建新的 git 仓库
3)到gitlab 或github网站上新建一个项目,复制SSH
4)使用如下命令将你的仓库连接到某个远程服务器:
git remote add origin <复制的SSH>
5)一般仓库都有README.md

touch README.md  # 生成README

克隆远程版本库到本地

执行如下命令以创建一个本地仓库的克隆版本:

git clone /path/to/repository

如果是远端服务器上的仓库,你的命令会是这个样子:

git clone username@host:/path/to/repository

开发分支

git checkout -b dev    # 创建开发分支dev,并切换到该分支下
git checkout dev    # 创建开发分支dev,不切换
git checkout master  # 回到主分支
git branch      # 查看本地所有的分支
git branch -r  # 查看所有远程的分支
git branch -a  # 查看所有远程分支和本地分支
git branch -d dev   # 把分支dev删掉

添加与提交

git add .	    # 添加当前目录的所有文件到暂存区
git add [dir]	# 添加指定目录到暂存区,包括子目录
git add [file1]	# 添加指定文件到暂存区
git commit -m "代码提交信息"    #提交暂存区到仓库区

提交到仓库

git push -u origin <master> # master可以改为其他分支
git push origin  <branch>  # 

查看提交历史/提交日志

git log    # 查看提交历史
git log --oneline # 以精简模式显示查看提交历史
git log -p <file>  # 查看指定文件的提交历史

更新本地仓库到最新改动

git pull               # 拉取远程仓库所有分支更新并合并到本地分支
git pull origin master  # 将远程master分支合并到当前本地分支
git pull origin master:master  # 将远程master分支合并到当前本地master分支,冒号后面表示本地分支

git fetch --all    # 拉取所有远端的最新代码
git fetch origin master  # 拉取远程最新master分支代码

显示改动

git diff                          # 显示暂存区和工作区的差异
git diff filepath                 # filepath路径文件中,工作区与暂存区的比较差异
git diff HEAD filepath            # 工作区与HEAD (当前工作分支)的比较差异
git diff <branchName> filepath    # 当前分支的文件与branchName分支的文件的比较差异
git diff commitId filepath        # 与某一次提交的比较差异

合并分支

我们在开发分支dev开发、测试完成在发布之前,我们一般需要把开发分支dev代码合并到master

git merge dev   # 在当前分支(比如master)上合并dev分支过来
git merge --no-ff origin/dev  # 在当前分支上合并远程分支dev
git merge --abort    # 终止本次merge,并回到merge前的状态

解决冲突

  1. 查看冲突文件内容
  2. 确定冲突内容保留哪些部分,修改文件
    Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,<<<<<<<HEAD是指主分支修改的内容,>>>>>>> dev是指dev分支上修改的内容。我们确定到底保留哪个分支内容,还是两个分支内容都保留呢,然后再去修改文件冲突内容
  3. 修改完冲突文件,重新提交,done

撤销与回退

我们想将某个修改后的文件撤销到上一个版本,或者想撤销某次多余的提交,都要用到git的撤销和回退操作:

git checkout -- test.txt   # 撤销test.txt的修改
cat test.txt   # 查看内容

1)代码git add到暂存区,并未commit提交,可以酱紫回退:

git reset HEAD file   # 取消暂存
git checkout file  #撤销修改

2)代码已经git commit了,但是还没有push,可以回退:

git log   # 获取到想要回退的commit_id
git reset --hard commit_id  # 回到过去的commit_id

3)代码已经push到远程仓库:

git log
git reset --hard commit_id
git push origin HEAD --force

标签tag

在软件发布时创建标签,是被推荐的。可以执行如下命令以创建一个叫做 1.0.0 的标签:

git tag [tag]  # 新建一个tag在当前commit  
git tag [tag] [commit]    # 新建一个tag在指定commit
git tag -d [tag]   # 删除本地tag
git push origin [tag]   # 推送tag到远程
git show [tag]   # 查看tag

三、Git小技巧

周报

无论是实验室、公司还是Teamwork,周报都比较常见,在一个共享空间上上传每个人一周的工作成果,合并到一起形成完整的周报。那么如何实现周报功能呢?

  1. gitlab上创建项目(此处不再赘述)
  2. 下载或更新

(1)初次操作:

git clone -b master git@gitlab.com:zyh/xxx.git  # 复制SSH

(2)非初次操作:

git checkout (master)
git pull
  1. 创建个人分支。此处注意名称不要有空格
git checkout -b 20201228_zyh # 创建个人分支20201228_zyh
  1. 在包含所有成员工作目录的.md中完成自己的部分。此处该文件是 20201228.md

  2. 修改,上传

git add 20201228.md  
git commit -m 'your commit message'
# 方法一:直接合并到master分支上,无须批准
git push origin -u 20201228_zyh:master  #将本地20201228_zyh分支合并到远程master分支,冒号后表示远程分支
## 方法二:合并到远程20201228_zyh,并申请合并批准,见步骤6、7
git push origin -u 20201228_zyh:20201228_zyh  #将本地20201228_zyh分支合并到远程20201228_zyh分支,冒号后表示远程分支
  1. 申请merge
merge
  1. 整合人合并所有分支到master
git pull
git checkout master
git merge branch1 branch2 branch3  # 一次性合并多个分支

加速下载

国内访问github下载速度很慢,当仓库内的文件较大时,clone或直接下载zip会非常费时且容易中断,造成前功尽弃。解决办法之一是使用国内的 Git 托管服务Gitee,它提供免费的 Git 仓库。

如果不想从gitee上下载,可以使用另一种镜像方法:
git clone .*?github.com.cnpmjs.org/(.*?)

四、Git家族

  • GitHub —— https://github.com/
    GitHub 作为开源代码库,拥有超过 900 万的开发者用户,目前仍然是最火的开源项目托管平台, GitHub 同时提供公共仓库和私有仓库,但如果使用私有仓库,是需要付费的

  • **GitLab **—— https://gitlab.com/
    GitLab 让开发团队对他们的代码仓库拥有更多的控制,相比较 GitHub , 它有不少特色:

    (1) 允许免费设置仓库权限;

    (2) 允许用户选择分享一个 project 的部分代码;

    (3) 允许用户设置 project 的获取权限,进一步提升安全性;

    (4) 可以设置获取到团队整体的改进进度;

    (5) 通过 innersourcing 让不在权限范围内的人访问不到该资源;

  • Gitee—— https://gitee.com/
    国内的 Git 托管服务,提供免费的 Git 仓库,还集成了代码质量检测、项目演示等功能。对于团队协作开发,Gitee 还提供了项目管理、代码托管、文档管理的服务

五、 GitLab/Github配置SSH key

当前很多公司都选择git作为代码版本控制工具,然后自己公司搭建私有的gitlab来管理代码,我们在clone代码的时候可以选择http协议,当然我们亦可以选择ssh协议来拉取代码。但后者需要选择本地git客户端生成ssh key,然后配置在gitlab里,而后使用ssh协议进行提交和拉取git远程仓库的代码。下面就来一步一步教大家如何配置:

  1. 打开本地git bash,使用如下命令生成ssh公钥和私钥对:
ssh-keygen -t rsa -C 'xxx@xxx.com'  # -C 后面是你注册gitlab的邮箱地址
  1. 一路回车
  2. 打开/.ssh/id_rsa.pub文件(表示用户目录,比如我的windows就是C:\Users\zyh),复制其中的内容
  3. 打开gitlab,找到Profile Settings-->SSH Keys--->Add SSH Key,并把上一步中复制的内容粘贴到Key所对应的文本框,在Title对应的文本框中给这个sshkey设置一个名字,点击Add key按钮
fig-ssh
  1. 到此就完成了gitlab配置ssh key的所有步骤,我们就可以愉快的使用ssh协议进行代码的拉取以及提交等操作了
posted @ 2020-12-28 12:40  Yhaozz  阅读(144)  评论(0)    收藏  举报