Git
版本控制(Version Control)是一种在开发过程中用于管理我们对文件、目录、工程等内容的修改历史,方便查看更改历史记录,备份一边恢复之前的保本的软件工程技术。
git fetch & pull详解 - Runner_Jack - 博客园
Git 删除分支——如何删除本地或远程分支_git 删除本地分支-CSDN博客
详解git pull和git fetch的区别, 为什么推荐用git fetch_fetch和pull-CSDN博客
Git教程(一) .git文件夹结构剖析_git 项目文件结构怎么安排-CSDN博客
文件结构
.git文件夹下
hooks info logs objects refs/heads refs/remotes
git fetch <remote> <branch>
git fetch <remote>
edition
Git standard edition of Git
MinGit MinGit is Git for Windows Applications 为缩减大小,MinGit 移除了本地化消息、交互式命令、帮助文档以及未被 git.exe 调用的可执行文件等等……Tcl/Tk……Perl 也被移除。
PorableGit PorableGit is Git for Windows Applications
集中式
svn 版本库是集中在中央服务器。工作时使用自己的电脑,所以首先需要从中央服务器获取到最新版本,完成工作后推送到服务器。集中式版本控制系统必须联网才能工作,对网络带宽要求较高。
分布式
不会因为服务器和网络问题影响工作
没有中央服务器,每个使用者都有一个完整的版本库,工作时不需要联网。
历史
linux、git 之父 李纳斯.托沃兹(Linux Benedic Torvlds)
git 是免费的用来待敌 BitKeeper
最初用来辅助 Linux 开发
文件的四种状态
- Untracked:未跟踪,此文件在文件夹中但并没有加入到 git 库,不参与版本控制,通过
git add
状态变为 Staged。 - Unmodify:文件已经入库,但未修改,即版本库中的文件快照内容与文件夹中完全一致,这种类型的文件有两种去除,如果它被修改而变更尾 Modified,如果使用
git rm
移除版本库则变为 Untracked 文件。 - Modified:文件修改,并没有进行其他的操作,这个文件有两个去向,一通过
git add
可以加入暂存 变为Staged 状态,使用git checkout
则丢弃修改,返回到 Unmodify 状态,即从文件库中取出来文件,覆盖当前修改。 - Stage:暂存状态,执行
git commit
则将修改同步到库中,这是库中文件和本地文件又变为一致,文件为 Unmodify 状态,执行git reset HEAD [filename]
取消暂存,文件状态为 Modified。
指令
# 忽略文件
# /.gitignore
# 以 # 号开头的行会忽略
# 可以使用 Linux 通配符
# * 表示任意多字符
# ? 表示任意一个字符
# [abc] 表示其中一个字符
# /dirctory 表示要忽略此目录下的文件,而非子目录。
# dirctory/ 表示要忽略此目录下的子目录,而非文件。
# SSH 公钥
ssh-keygen -t rsa
# ~/.ssh 目录下会生成 id-rsa 私钥 id-rsa.pub 公钥
# git 服务器添加公钥
# 复制 id-rsa.pub 内容到 git 服务器的SSH公钥设置
# 初始化
$ git init # 初始化 生成 .git 目录及文件
# 拷贝
$ git clone [url]
# 配置
# ~/.gitconfig 用户个人配置文件
# 打印系统配置
$ git config --system --list
# 打印个人全局配置
$ git config --global --list
$ git config --global user.name [name]
$ git config --global user.email [email]
# 文本编辑器
$ git config --global code.editor [vi|vim|emacs]
$ git config --global merge.tool [vimdiff|]
# 删除配置块
$ git config --global --remove-section [key]
# 清除键位值
$ git config --global --unset [key]
# 工作区 -> 暂存区
# 添加
$ git add ...[file]
# 添加当前目录所有文件
$ git add .
# 添加每个变化前都会要求确认
$ git add -p ...[file]
# 删除
$ git rm ...[file]
# 停止追踪指定文件,但该文件 会保留在工作区
$ git rm --checked [file]
# 修改
$ git mv [file-original] [file-renamed]
# 暂存区 -> 仓库区
# 全部添加
$ git commit -m [message]
# 指定添加
$ git commit ...[file] -m [message]
# 显示所有 diff 信息
$ git commit -v
# 仓库信息
$ git status
# 分支
# 打印本地分支
$ git branch
# 打印远程分支
$ git branch -r
# 新建一个分支与指定远程分支建立追踪关系
$ git branch --track [branch] [remote branch]
# 指定现有分支与远程分支建立追踪关系
$ git branch --set-upstream [branch] [remote branch]
# 合并指定分支到当前分支
$ git merge [branch]
# 删除本地分支
$ git branch -d [branch]
# 删除远程分支
$ git branch -rd [remote branch]
$ git push origin --delete [remote branch]
# 打印分支历史
$ git log
# 打印分支,每次 commit 发生变更的文件
$ git log --stat
# 本地仓库 -> 远程仓库
# 下载远程仓库
$ git fetch [remote branch]
# 显示所有远程信息
$ git remote -v
# 撤销
# 恢复暂存区的的指定文件到工作区
$ git checkout [file]
# 恢复指定 commit 的指定文件到暂存区和工作区
$ git checkout [commit] [file]
# 恢复暂存区的所有文件到工作区
$ git checkout .
# 重置暂存区的指定文件,与上次 commit 保持一致,但工作区不变
$ git reset [file]
# 重置暂存区和工作区与上次 commit 保持一致
$ git reset --hard
# 重置 HEAD 为指定 commit 暂存区和工作区,与指定 commit 保持一致。
$ git reset [commit]
# 重置 HEAD 为指定 commit 但暂存区和工作区保持不变
$ git reset --keep [commit]
# 生成一个可供发布的压缩包
$ git archive
ERROR
fatal: unable to access 'https://xxx.git'; error setting certificate verify locations:
CAfile: xx
CApath: none
git config --system http.sslverify false