新人该怎样使用git - git的基础知识与常规操作

219 阅读5分钟

在我大学第一次接触代码后,就一直使用git了。对于大多数开发者来说,都会需要用到git

最近帮公司的实习生解决了一些关于git的问题,想到了新人时期只会git的基础命令(add commit pull push)的自己。

在本文中,我将介绍一些git的基础知识和常规操作,帮助新人对git有个基础的认识以及满足常规多人项目开发的操作。

关于版本控制

什么是“版本控制”?为什么我们要关心它?

版本控制是一种记录(多个)文件内容的变化,以便来查询特定版本进行修订的系统。

假设你开发了某个活动的宣传网站,可能你需要保存这个网站文件的所有修订版本。

比如你更新了这个网站,但可能需要回到以前的版本,有了版本控制系统你就可以将选定的文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态。

你可以比较文件的变化细节,查出最后是修改了哪个地方,从而找出导致怪异问题出现的原因。

git的基础知识

未命名文件 (9).png

主要涉及到四个关键点:

1.工作区(workspace):本地电脑存放项目文件的地方。

2.暂存区(index):在使用git 管理项目文件的时候,本地项目文件夹中会多出一个.git的文件夹,这个.git文件夹被称之为版本库。使用git add. 命令将工作区的文件添加到暂存区里。

3.本地仓库(repository):.git文件夹里还包括git自动创建的master分支。使用git commit -m""命令可以将暂存区中的文件添加到本地仓库中。

4.远程仓库(remote):项目代码在远程git服务器上,例如放在github上,就是一个远程仓库。使用git clone命令可以将远程仓库的代码拷贝到本地仓库中。  

.git文件夹中包含暂存区和本地仓库

git命令

  1. git管理配置的命令 几个核心存储区的交互命令
  2. 工作区与暂存区的交互
  3. 暂存区与本地仓库(分支)上的交互
  4. 本地仓库与远程仓库的交互

git管理配置的命令

初次使用git配置用户信息

  • 配置用户名 git config --global user.name "your name"
  • 配置用户邮箱 git config --global user.email "youremail@github.com" 查询配置的信息
  • 查看当前配置 git config --list
  • 查看本地仓库配置git config --local --list

工作区上的操作命令

新建仓库

  • 将工作区的项目文件使用git进行管理(新建本地仓库):git init
  • 从远程仓库克隆项目:git clone

提交

  • 将工作区的文件提交到暂存区:git add . 撤销
  • 删除工作区的文件,并删除暂存区对应的文件记录:git rm <file>
  • 从暂存区中删除文件,但是工作区依然还有该文件:git rm --cached <file>
  • 取消暂存区已经暂存的文件:git reset HEAD
  • 撤销上一次对文件的操作:git checkout --<file> 查询信息
  • 查询当前工作区所有文件的状态: git status
  • 比较工作区和暂存区上差异:git diff <file>

暂存区上的操作命令

提交文件到本地版本库

  • 将暂存区中的文件提交到本地仓库:git commit -m"info"
  • 撤销上次提交:git commit --amend 查看信息
  • 比较暂存区与上一版本的差异:git diff --cached
  • 查看提交历史:git log 分支管理
  • 创建分支:git branch <newbranchName>
  • 显示所有分支:git branch
  • 从当前所在分支切换到其他分支:git checkout <branch-name>
  • 新建并切换到新建分支上:git checkout -b <newbranchName>
  • 删除分支:git branch -d <branchName>
  • 当前分支和指定分支进行合并:git merge <branchName>
  • 把远程分支合并到当前分支:git merge <remote-name>/<branchName> eg:git merge origin/master
  • 在远程分支的基础上创建新的本地分支:git checkout -b <newbranchName> <remote-name>/<branch-name>
  • 从远程分支checkout出来的本地分支称之为跟踪分支,在跟踪分支上向远程分支上推送内容git push,在跟踪分支上合并远程分支git pull
  • 将一个分支里提交的改变移到基底分支上重放一边:git rebase <rebase-branch> <branch-name> eg:git rebase master server 将server分支提交的改变在基地分支master上重演一遍。分支提交发布到远程仓库中就千万别再使用rebase操作

本地仓库上的操作

  • 查看本地仓库关联的远程仓库:git remote
  • 添加远程仓库:git remote add [remote-name][url]
  • 从远程仓库中抓取本地仓库中没有的更新:git fetch[remote-name] eg:git fetch origin使用fetch只是将远端数据拉到本地仓库,并不自动进行合并到当前分支
  • 将本地仓库某分支推送到远程仓库上:git push [remote-name] [branch-name] eg:git push origin master
  • 移除远程仓库:git remote rm [remote-name]

忽略文件 .gitignore

一般来说我们会有些文件无需纳入Git的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。我们可以创建一个名为.gitignore的文件,列出要忽略的文件模式。如下例:

# 此为注释 – 将被 Git 忽略
# 忽略所有 .a 结尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目录下的所有文件
build/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录下所有扩展名为 txt 的文件
doc/**/*.txt