likes
comments
collection
share

一份前端老菜鸟的Git总结

作者站长头像
站长
· 阅读数 6

简介及安装

Git 是一个开源的分布式版本控制系统,是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

Git 与 SVN 区别

Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。

Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。

Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。

Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。

Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

一份前端老菜鸟的Git总结

Windows 平台上安装

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

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

一份前端老菜鸟的Git总结

完成安装之后,就可以使用命令行的 git 工具(已经自带了 ssh 客户端)了,另外还有一个图形界面的 Git 项目管理工具。

在开始菜单里找到 "Git" -> "Git Bash",会弹出 Git 命令窗口,你可以在该窗口进行 Git 操作。

一份前端老菜鸟的Git总结

Mac 平台上安装

安装包下载地址: sourceforge.net/projects/gi…

一份前端老菜鸟的Git总结

工作流程及原理

Git 的通用操作流程如下图所示:

一份前端老菜鸟的Git总结

主要涉及到四个关键点:

工作区(workspace): 本地电脑存放项目文件的地方,我们平时开发写的代码也是在这个区进行的;

暂存区(Index): 暂时存放文件的地方,通过add命令可以将工作区的文件添加到暂存区内;

本地仓库(Repository): .git文件夹里还包括git自动创建的master分支,并且将HEAD指针指向master分支。使用commit命令可以将暂存区中的文件添加到本地仓库中;

远程仓库(Remote): 项目代码在远程git服务器上,通常使用clone命令将远程仓库拷贝到本地仓库中,开发后通过push推送到远程仓库中;

一份前端老菜鸟的Git总结

SSH和HTTPS

使用SSHHTTPS的主要区别如下:

如果是使用HTTPS拉代码的话,每次从远程仓库拉取、提交代码都需要输入账号密码;

如果是使用SSH的话,从远程仓库拉取、提交代码都会比较本地和平台上传的SSH,如果一致就验证通过,否则验证失败!

Windows 平台上创建SSH

键入cmd,打开系统的命令提示符;

键入命令: ssh-keygen -t rsa -C "email@email.com","email@email.com",此时你的C:\Users\admin\.ssh路径会生成id_rsaid_rsa.pub两个文件;

一份前端老菜鸟的Git总结

使用记事本打开id_rsa.pub文件,复制文件的内容,并添加到 Github 的 SSH 密钥管理页面;

一份前端老菜鸟的Git总结

常用命令

Git 常用命令如下:

配置信息

查询配置信息

列出当前配置: git config --list

列出repository配置: git config --local --list

列出全局配置: git config --global --list

列出系统配置: git config --system --list;

设置配置信息

配置用户名: git config --global user.name "your name"

配置用户邮箱: git config --global user.email "youremail@github.com"

其他配置信息

配置 Git 命令输出为彩色: git config --global color.ui auto

配置 Git 使用的文本编辑器: git config --global core.editor vi

工作区操作

新建仓库

创建一个新的本地仓库: git init

提交

提交工作区所有文件到暂存区: git add .

提交工作区指定文件到暂存区: git add <file1> <file2> ...

提交工作区中某个文件夹中所有文件到暂存区: git add [dir]

撤销

删除工作区文件,并且从暂存区删除对应的文件记录: git rm <file1> <file2> ...

从暂存区删除文件,但是工作区保留文件: git rm --cached <file1> <file2>...

取消暂存区已经暂存的文件: git reset HEAD <file>...

撤销工作区指定文件的操作: git checkout -- <file>;撤销工作区所有文件的操作: git checkout -- .

更新文件

重命名文件,并将已改名文件提交到暂存区: git mv [file-original] [file-renamed]

Git 的文件命名默认情况下是不区分大小写的

暂存区操作

提交到本地仓库

将暂存区的文件提交到本地仓库: git commit -m "commit-info"

将工作区和暂存区的文件一起提交到本地仓库: git commit -am "commit-info"

覆盖上次的commit记录,并将暂存区的文件提交到本地仓库: git commit --amend -m "commit-info"

本地仓库操作

从远程仓库拉取代码并合并到本地: git pull <remote-name> <remote-branch>:<local-branch>,使用rebase的模式进行合并: git pull --rebase <remote-name> <remote-branch>:<local-branch>

从远程仓库中抓取本地仓库中没有的更新: git fetch [remote-name]

从远程仓库抓取所有分支的更新: git fetch --all

将本地仓库某个分支推送到远程仓库上: git push [remote-name] [branch-name],如果想将本地分支推送到远程仓库的不同分支: git push <remote-name> <local-branch>:<remote-branch>

远程仓库操作

从远程仓库克隆项目: git clone <url>

查看本地仓库关联的远程仓库: git remote,加上-v的参数后,会显示远程仓库的url地址;

添加远程仓库,一般会取一个简短的别名: git remote add [remote-name] [url]

查看远程仓库的详细信息: git remote show origin

移除远程仓库: git remote rm [remote-name]

分支操作

创建分支: git branch <branch-name>

从当前分支切换到其他分支: git checkout <branch-name>

新建并切换到新建分支: git checkout -b <branch-name>

删除分支: git branch -d <branch-name>

强制删除分支: git branch -D <branch-name>

将当前分支和指定分支进行合并: git merge <branch-name>

显示本地仓库的所有分支: git branch

显示远程仓库的所有分支: git branch -r

显示本地仓库和远程仓库的所有分支: git branch -a

查看哪些分支已经合并到当前分支: git branch --merged

查看当前哪些分支还没有合并到当前分支: git branch --no-merged

把远程分支合并到当前分支: git merge <remote-name>/<branch-name>

重新命名分支: git branch -m <old-branch-name> <new-branch-name>

差异比较

比较工作区中当前文件和暂存区之间的差异: git diff <file-name>

比较暂存区文件和本地仓库的差异: git diff --cached

指定文件在暂存区和本地仓库的差异: git diff <file-name> --cached

其他操作

查询当前工作区所有文件的状态: git status

查看最近的三条提交历史(单行显示): git log --oneline -3

git tag(标签)

列出所有的标签: git tag

搜索符合特定条件的标签: git tag -l "v1.4.2.*"

创建一个轻量级标签: git tag v1.5

创建一个含备注类型的标签: git tag -a v1.4.2 -m "commit-info"

使用git show命令查看对应标签的版本信息,并连同显示打标签时的提交对象: git show v1.4.2

将标签推送到远程仓库中: git push origin v1.4.2

将本地所有标签全部推送到远程仓库中: git push origin --tags

git stash(暂存)

隐藏当前变更,以便能够切换分支: git stash

查看当前所有的暂存列表: git stash list

应用最新的储藏: git stash apply,如果想应用其他的储藏: git stash apply stash{0};如果使用pop命令不仅可以重新应用储藏,还可以立刻从堆栈中清除stash: git stash pop

.gitignore

.gitignore 文件的作用是不再管理指定的文件修改。

语法规范

空行不匹配任何文件,因此它可以作为可读性的分隔符;

# 开头的行是注释;

斜线 / 用作目录分隔符;

* 匹配除斜杆以外的任何内容;

? 匹配除斜杆以外的任何一个字符;

** 与完整路径名匹配的模式中的两个连续星号具有特殊含义:

  • 前导 ** 后跟斜杠表示在所有目录中匹配;
  • 尾随的 /** 匹配里面的所有内容;
  • 斜杆后跟两个连续的星号,然后斜杠匹配零个或者多个目录;
  • 其他连续的星号被视为常规星号,将根据之前的规则进行匹配;

! 表示不忽略匹配到的文件或者目录;

配置文件示例

# 忽略所有目录下文件名为a的任何文件
a.*

# 忽略所有目录下后缀为txt的文件
*.txt

# 不忽略所有目录下的c.txt文件
!c.txt

# 忽略file目录下所有文件,包括其他目录下的file目录下的文件
# 例如 a/file下面的文件会被忽略
file/

# 只忽略当前file目录下所有文件,不包括其他目录下的file目录下的文件
# 例如 a/file下面的文件不会被忽略
/file

# 忽略任何位置file目录下的所有文件
file

# 忽略任何位置file目录下的所有文件 同file
**/file

# 忽略任何直接位于c目录下的file目录下的所有文件
**/c/file

# 同file/
file/**

# 忽略a/file,a/c/file,a/c/d/file 目录下的所有文件
a/**/file

.gitignore 配置发生冲突时,后面的配置会覆盖前面的配置

.gitignore 不生效的解决方案

git rm -r --cached .

git add .

git commit -m "update .gitignore"

参考资料