Git - 管理项目和控制版本的工具

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理或大或小的项目。利用 git,可以在本地很好地控制项目版本,让项目有条不紊地进行;通过提交、拉取、推送等操作,与同事参与远程共同开发。

在这里推荐一手 Git 闯关游戏 Learn Git Branch,有一定基础的可以用来提升熟练度。

1 安装配置

1.1 安装

此处只涉及 Windows 系统上的安装

安装包下载地址:https://gitforwindows.org/

官网慢,可以用国内的镜像:https://npm.taobao.org/mirrors/git-for-windows/

完成安装之后,就可以在 cmd 或 powershell 等命令行工具使用 git 工具了。一般情况下,在某个文件夹点击右键,你可以看到 Git Bash Here,通过这个也可以打开 Git 工具。

1.2 Git 配置

Git 提供了一个叫做 git config 的工具,用于配置或读取相应的工作环境变量。这些环境变量决定了 Git 在各个环节的管理员信息和使用方式,存放于 /etc/gitconfig (所有用户生效 --system) 或 ~/.gitconfig (当前用户配置 --global)。

用户信息

$ git config --global user.name "yourname"
$ git config --global user.email youremail

文本编辑器

下面代码设置的是 vscode 为默认编辑器,请将路径改为你电脑的路径。

git config --global core.editor D:\Vscode\Microsoft VS Code\Code.exe

查看配置信息

$ git config --list

2 工作流程

  • 将远程仓库 clone 到本地,或者在本地初始化一个空仓库
  • 添加、修改或删除文件
  • 如果远程仓库被别人更新了,你可以获取更新文件
  • 在提交到本地仓库前检查修改
  • 提交修改
  • 如果发现错误,可以回退并修改
  • 确认无误后,将本地分支推送到远程仓库

3 工作区、暂存区、版本库

Git 的本地仓库主要由工作区、暂存区、版本库组成。当你推送到远程仓库时,本地仓库与远程仓库就建立了关系。

  • 工作区:本地电脑上的文件目录
  • 暂存区:或者称为索引,通常存放在 .git/index
  • 版本库: 隐藏目录 .git,里面存储着版本的信息

上述三个组成部分的联系如下:

仅大致了解一下,结合后面一起理解

Git - 管理项目和控制版本的工具_第1张图片

4 基础操作

4.1 创建仓库

order introduction
git init 初始化一个空仓库
git clone 将远程仓库克隆到本地

一个简单的操作例子:

$ git init                  # 初始化,将产生一个隐藏目录 .git
$ git add .                 # 添加修改的文件到暂存区
$ git commit -m "add"       # 将暂存区内的文件提交到本地仓库

或者通过克隆远程仓库来创建:

# git clone  
$ git clone https://github.com/user/repo Repo

4.2 提交和修改

Order Introduction
git add 添加文件到暂存区
git status 检查本地仓库的状态
git diff 比较暂存区和版本库的差异
git commit 将暂存区内文件推送到本地仓库
git reset 回退版本
git rm 删除工作区的文件
git mv 移动或重命名工作区的文件

添加文件到暂存区:

$ git add [file1] [file2] ...   # 添加一个或多个文件
$ git add [dir]                 # 添加一个目录
$ git add .                     # 添加所有文件

展示状态:

status: A 表示已添加到暂存区;AM 表示暂存区内存在文件但已修改; U 表示未添加到暂存区

$ git status                    # 详细地展示
$ git status -s                 # 简洁地展示

显示暂存区文件与工作区内修改但未提交到暂存区的文件之间的差异:

$ git diff [file]               # 展示差异
$ git diff --cached [file]      # 显示暂存区与上次commit的差异
$ git diff --stat [file]        # 简洁地展示差异
$ git diff HEAD                 # 展示所有修改

删除文件:

$ git rm <file>                 # 同时删除暂存区和工作区的文件
$ git rm -f <file>              # 强制删除暂存区内修改过但未提交的文件
$ git rm --cached <file>        # 从暂存区内删除但保留工作区内的文件

提交暂存区内的文件到本地仓库:

$ git commit -m [message]       # message 为 commit 的备注信息
$ git commit [file1] [file2] ... -m [message]

回退版本:

git reset 的语法:

$ git reset [--soft | --mixed | --hard] [HEAD]

--mixed 为默认值,作用是让暂存区内的文件与上次 commit 保持一致。

这里给出 HEAD 的含义:

  • HEAD/HEAD~0 当前版本
  • HEAD^/HEAD~1 上一版本
  • HEAD^^/HEAD~2 上上版本

版本指版本库,一般 commit 之后产生新版本

$ git reset HEAD^               # 回退所有内容到上一版本
$ git reset HEAD^ <fileName>    # 回退特定文件
$ git reset --soft <HEAD>       # 回退到某一版本
$ git reset --hard <HEAD>       # 将包含未 commit 的文件的所有文件回退到某一版本
$ git reset --hard origin/master # 回退版本某一分支直到与远程仓库一致

4.3 远程操作

Order Introduction
git remote 远程操作
git fetch 抓取远程仓库的文件
git pull 下载远程文件并合并
git push 向远程仓库上传文件并合并

远程操作:

$ git remote -v                         # 显示所有远程仓库
$ git remote rm <name>                  # 删除远程仓库文件
$ git remote rename <oldName> <newName> # 修改远程仓库名称

下载远程仓库并合并:

$ git fetch
$ git merge

等同于:

$ git pull <远程仓库名称> <远程分支>:<本地分支> # 参数可省略

git pull 会将远程仓库的文件拉取到本地的工作区,而不是直接拉取到本地仓库中。因此在执行完该命令后,还需执行 addcommit 等命令。

上传:

$ git push origin master # 将本地分支 master 推送到远程仓库分支 master

5 Git Github/Gitee

5.1 创建自己的仓库

  • 登录 Github/Gitee 账号,创建一个新仓库;
  • 克隆仓库到本地,将会生成一个工作区文件夹;
git clone https://github.com/{username}/Repo RepoName
  • 使用编辑器 Vscode 或 Vim 来添加或修改工作区的文件;
  • 同时删除工作区和暂存区的文件 git rm
  • 提交修改到本地仓库 git commit -m "uploadInfo"
  • 如果发现提交了错误文件,可以使用下面方法:
    • 未将错误文件添加到暂存区:
      使用 git checkout . 将工作区内的所有文件替换成暂存区内的文件
    • 已添加到暂存区但未提交到本地仓库:
      使用 git reset HEAD . 撤销暂存区的所有修改至工作区,接下来就回到了上一步。
    • 已提交到本地仓库:
      使用 git reset --hard HRAD^ 将所有文件回退至上一版本。
  • 最后,push 所有修改到远程仓库 git push origin main

5.2 参与他人的仓库

在下面操作中,请格外注意他人的仓库和自己 fork 得到的仓库的区别!

1. fork

首先在 GitHub/Gitee 上 fork 他人的仓库

2. 克隆到本地

将 fork 到自己账号的仓库,克隆到本地。注意是自己通过 fork 获得的仓库。

git clone [email protected]:username/repo.git

3. 与他人的仓库建立关系

使用 git remote -v 查看一下当前的远程链接情况,会发现:

origin [email protected]:username/repo.git (fetch)
origin [email protected]:username/repo.git (push)

本地仓库并没有与他人的仓库形成联系,而只有到自己仓库的关系流。接下来使用命令,建立联系:

git remote add upstream https://github.com/OtherUser/repo.git

然后查看远程链接,出现下面情况则表示已建立联系。

origin  [email protected]:xxxx (fetch)
origin  [email protected]:xxxx (push)
upstream https://github.com/yyyy (fetch)
upstream https://github.com/yyyy (push)

4. 新建分支并拉取最新内容

首先,新建并切换到新建的分支:

git checkout -b myBranch 

无论是第二天准备开始编辑,还是要提 PR 前,都需要将远程仓库的 master 同步到自己的分支来。如果遇到合并冲突,需要查看冲突文件,手动修改解决。

首先拉取 master 分支的最新内容,再切换回自己的分支:

git checkout master
git pull upstream master
git checkout myBranch

接着将 master 的最新内容同步到自己的分支上:

git rebase -i upstream/master

该过程如果出现冲突的话,需要通过 git status 来查看冲突文件,手动编辑修改后,用 git add 添加,之后通过 git rebase --continue 来完成中断的 rebase 操作。

遇到合并冲突的问题,基本都需要类似的操作

5. 修改并提交到自己的仓库

然后,在新建的分支中编辑,比如新建文件、编辑文件等等。最后使用 git add, commit, push 等操作,将文件提交到自己的仓库。注意,一定是自己的仓库!

6. 发起 PR (Pull Request)

首先到自己的仓库,点击 Pull Requests,再点击 New pull requests;接着会进入 Comparing changes 界面,需要的话可以检查一下修改的地方,保证准确性;最后填写相关信息,再点击 Create pull request 即可。

最后合并 (Merge) 就是仓库作者的事了。

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