在我大学第一次接触代码后,就一直使用git
了。对于大多数开发者来说,都会需要用到git
。
最近帮公司的实习生解决了一些关于git
的问题,想到了新人时期只会git
的基础命令(add commit pull push
)的自己。
在本文中,我将介绍一些git
的基础知识和常规操作,帮助新人对git
有个基础的认识以及满足常规多人项目开发的操作。
关于版本控制
什么是“版本控制”?为什么我们要关心它?
版本控制是一种记录(多个)文件内容的变化,以便来查询特定版本进行修订的系统。
假设你开发了某个活动的宣传网站,可能你需要保存这个网站文件的所有修订版本。
比如你更新了这个网站,但可能需要回到以前的版本,有了版本控制系统你就可以将选定的文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态。
你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因。
git的基础知识
主要涉及到四个关键点:
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命令
- git管理配置的命令 几个核心存储区的交互命令
- 工作区与暂存区的交互
- 暂存区与本地仓库(分支)上的交互
- 本地仓库与远程仓库的交互
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