:::info 本文内容基于我自己的理解和一些文章,是学习笔记,但同时我也希望它能被作为一个学习参考资料。
所以如果有错误请及时评论或者联系我,希望能为大家提供一个比较好的学习参考!
因为我自己的开发经历有限,所以并不能保证自己的理解是合适且正确的,所以希望大家狠狠地 educate 我! ::: :::tips 本条目将把目光放在具体的git命令的介绍与使用,旨在指导进行具体的工作。 ::: Git 有许多命令,但是其实常用的就图中的这么几个,甚至在刚开始学习使用的时候只需要记住其中的一两个,但是这并不是说其他命令就是没用的,我会在这里按照使用场景分类,尽可能地介绍 Git 命令。
常用命令

由于一般来说运行命令都是以本地视角,所以这里的「使用场景」的划分也是以本地视角展开的。 并且在某些需要涉及远程仓库的地方主要以 Github 的使用为参考。

简洁版本

该条目主要适用于初学与简单使用 Git ,并不适合长期维护的大型项目。

  1. # 在 Github 创建仓库
  2. # 获取仓库的 http / SSH clone 命令
  3. # 从远程将仓库克隆到本地
  4. git clone <repo-url>
  5. # 完成代码修改后将修改添加到暂存区
  6. git add -A # 添加所有修改
  7. git add . # 添加当前目录下的修改
  8. # 提交修改
  9. git commit -m "Write commit message here."
  10. # push 到远程仓库
  11. git push origin

配置

Git 的配置文件名叫 .gitconfig,用来存放一些配置信息,在用户目录下的为全局配置信息,而在项目目录下的则为项目配置信息。

  1. # 显示配置
  2. git config --list

生成本地仓库

本地生成仓库主要有两种途径,一是在本地直接新建一个仓库,而是克隆一个远程仓库。

  1. # 在当前目录 . 新建一个仓库
  2. git init
  3. # 创建一个名为 <dir-name> 的目录,将其初始化为一个 Git 仓库
  4. git init <dir-name>
  5. # 从 <repo-url> 克隆一个远程仓库(包括所有的 git 信息)
  6. git clone <repo-url>

从文件角度来讲,实际上它是生成了一个有.git文件夹的文件夹,而.git文件夹存储了 Git 所需要的大部分信息。
使用常见的 shell 进入仓库文件夹后,一般会有一个 label 表示你已经进入了一个仓库的某个分支了。比如进入一个新的仓库时,会有一个master的 label ,具体表现形式主要看你的 shell 和主题了。
需要注意的是,在本地直接创建的仓库仅仅只是一个本地仓库,不具备远程协作功能,需要进行对应的配置,参考 远程协作 条目;而一般从远程仓库克隆下来的仓库都已经经过设置,可以直接进行远程协作。

版本管理

Git 基于版本之间的差异进行代码管理,使用 Git 进行代码管理主要指在做完特定修改以后将其添加到对应分支中。
在考虑 Git 操作之前,你可以放心地进行你的代码编辑工作,不过记得在合适的时机进行版本管理。

查看差异文件

通过如下指令可以查看差异文件

  1. # 显示检测到差异的文件,它们正在等待被提交
  2. git status

添加到暂存区

在完成代码修改工作后需要将代码添加到暂存区:

  1. # 将 <target> 中的修改添加的暂存区,文件夹和文件同理,'.' 同理
  2. git add <target>
  3. # 对于所有的修改依次进行添加确认(包括单一文件的多处修改)
  4. git add -p
  5. # 用交互式的方法进行添加
  6. git add -i

提交到仓库

添加完后需要进行提交,在仓库中形成一个节点:

  1. # 提交到仓库
  2. git commit -m "Write commit message here."
  3. # 修正上一次提交,意思是说会扩充并替代上一次提交
  4. # 应用场景如:上一次提交有遗漏、上一次提交的提交信息有问题等
  5. git commit --amend -m "Write commit message here."

查看提交记录

完成提交后这一次修改就会被写入历史记录中,你可以通过log查看

  1. git log

回溯 / 抵消记录

log中可以查询得到每一次commit的哈希,得到这些哈希(也可以使用标签)以后我们可以用它来进行回溯抵消操作:

  1. # 回溯到特定 commit ,比较危险
  2. git reset HEAD # 回溯到上一个 commit ,效果上清空了暂存区,不影响工作区
  3. git reset --hard <commit-id> # 抛弃当前的工作区并回溯到某个版本
  4. # 抵消一次 commit ,产生一个与目标 commit 互逆的 commit
  5. git revert HEAD # 抵消上一次 commit
  6. git revert <commit-id> # 抵消特定 commit

删除 / 移动(重命名)

删除文件和移动(重命名)文件可以使用rmmv,关于rm(mv)和git rm(git mv)的区别可以看这里
简单来说就是,git rm <file>等价于rm <file> ; git add <file>mv同理,但是你无法把一个文件通过git mv移动到 repo dir 之外。

  1. # 删除某个文件
  2. git rm <file>
  3. # 移动(重命名)某个文件
  4. git mv <from> <to>
  5. # 使用如下命令还可以停止对某个文件的追踪,最常用的情况一般和`.gitignore`有关
  6. git rm --cache <file>

标签操作

上面许多涉及定位特定 commit 的操作都需要获取 commit 的哈希。不过如果对某些特定版本进行一些标签管理,那我们就可以通过访问标签来索引特定 commit ,因而,tag 实际上是不可重复的。

  1. # 为特定 commit 添加 tag
  2. git tag <tag name> <commit id>
  3. # 删除特定 tag
  4. git tag -d <tag name>

另外,需要提醒的是,默认情况下git push不会将 tag 上传到远程仓库,需要在命令后加入--tags来一次性 push 所有的 tag 或者添加<tag name>来上传 tag 。

远程协作

远程管理主要指多人项目时需要通过远程仓库来完成协作。这里以 GitHub 为例。
当你在 Github 创建一个空 repo 以后,会有这样一个默认页面:
image.png
我们重点关注中间两个代码框,写的已经非常清楚了。
create a new repository on the command line指导你在本地创建一个新的空仓库,并与远程仓库链接;
push an existing repository from the command line指导你如何将远程仓库和本地仓库链接起来,并 push 。

远程仓库管理

来自 GitHub 的指导文件中最核心的一条指令是如何链接本地仓库与远程仓库

  1. # 在本地添加远程仓库,命名为 <remote name> ,注意这里的 <url> 并不是浏览器上面
  2. # 那个,而是从 github 复制过来的 http 或者 ssh 推送
  3. git remote add <remote name> <url>
  4. # 常用的 <remote name> 是 origin

除此之外,关于远程仓库的相关命令还有如下:

  1. git remote -v # 显示远程仓库(详细信息)
  2. git remote rm <remote name> # 解除与对应远程仓库的绑定关系
  3. git remote rename <from> <to> # 重命名特定远程仓库

本地从远程仓库拉取内容

主要有两种方式,即pullfetch,区别在于fetch并不会合并内容,而仅仅是下载远程仓库中的变动信息。简单来说就是pull等效于fetchmerge

  1. # 从远程仓库下载变动内容
  2. git fetch <remote name>
  3. # 从远程仓库拉取变动内容并且合并到指定分支
  4. git pull <remote name> <branch>

本地向远程仓库推送内容

在本地完成 commit 操作后,就可以 push 到远程仓库:

  1. # 推送 <branch> 的内容到 <remote> ,并自动设置上游,这意味着在这个分支里,
  2. # 下一次 push 只需要输入 git push 即可
  3. git push -u <remote> <branch>
  4. # eg: 推送 master 分支的内容到 origin ,并自动设置上游
  5. git push -u origin master
  6. git push --force # 强制推送当前分支,即使有冲突存在
  7. --all # 推送所有分支的内容

分支管理

查看分支

  1. git branch # 显示本地所有分支
  2. -r # 显示远程所有分支
  3. -a # 显示所有分支

新建分支 / 切换分支 / 设置上游

  1. # 新建一个名为 <branch name> 的新分支,但不切换
  2. git branch <branch name>
  3. # 通过 checkout 来切换分支,比如进入到刚刚创建的分支汇总
  4. git checkout <branch> # 该命令会更新工作区
  5. # 创建完分支后通过如下命令设置上游
  6. git branch --set-upstream <local branch> <remote branch>
  7. # 将上面的命令进行集成,有:
  8. # 直接新建一个名为 <branch name> 的新分支并切换
  9. git checkout -b <branch name>
  10. # 新建一个名为 <local branch> 的新分支,并设 <remote branch> 为上游
  11. git branch --track <local branch> <remote branch>

分支合并

  1. # 将指定分支合并到当前分支,需要处理冲突部分(沟通协商、手动解决)
  2. git merge <branch>
  3. # 将特定 commit 合并进当前分支
  4. git cherry-pick <commit id>

分支删除

  1. # 删除本地分支
  2. git branch -d <branch>
  3. # 删除远程分支
  4. git push <remote> --delete <branch>
  5. git branch -dr <remote>/<branch>
  6. # eg:
  7. git branch -dr origin/testbrach

你可能还要了解的 / 本文还没讲的东西