Git 基础
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
Git 安装
安装包下载地址: http://git-scm.com/downloads
安装方法:
MacOS:
# homebrew
brew install git
# XCode: builtin
Linux:
# debain, ubuntu
apt-get install git
# rhel, centos, ... 源码安装
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.5.tar.xz
tar xf git-2.9.5.tar.xz
cd git-2.9.5
./configure --prefix=/usr/local/git-2.9.5
make -j8
make install
# add to path
echo 'PATH=$PATH:/usr/local/git-2.9.5/bin' > /etc/profile.d/git-2.9.5.sh
. /etc/profile
Windows:
# download the binary file and install
Git 工作流程
- 创建本地工作环境: 本地
git init
, 远程git clone xxx.git
- 本地文件修改
- 设置本地文件追踪:
git add xxxx
- 提交本地修改
git commit -m 'xxxx'
- *远程推送: 远程环境
git push ...
Git 基本概念
- 工作区: 修改代码的地方
- 索引: 记录git add 后的文件目录状态
- 仓库: 记录git commit 后的文件目录
- HEAD: 当前仓库指向的commit
Git 基本操作
# 创建本地仓库
git init
# 工作目录与索引之间的操作
git add file...
git rm file...
git mv file file
# 提交索引内容到本地仓库
git commit -m message
# 查看工作区状态:
# Changes to be committed: 已经在索引,等待提交
# Untracked files: 仅在工作区,未被索引跟踪
git status
# 重置 HEAD
git reset --soft <commit-id, default HEAD> # change HEAD
git reset [--mixed] <commit-id, default HEAD> # change HEAD & index
git reset --hard <commit-id, default HEAD> # change HEAD & index & working dir
Git 远程管理
# 从远程仓库克隆
git clone url [name]
# 查看远程仓库信息
git remote -v
# 为本地仓库添加一个远程仓库
git remote add name url
# 远程仓库的一些操作
git remote rename old new
git remote remove name
# 获取/设置远程仓库的url
git remote get-url name
git remote set-url name newurl
git remote set-url --add name newurl
git remote set-url --delete name newurl
# 提交/拉取 远程仓库内容
git fetch
git push
git pull
Git 分支管理
# 分支操作
git branch
git branch -d
git branch -D
# 切换分支
git checkout <branch>
git checkout -b <new branch>
# 从分支提取文件到工作目录
git checkout [branch] -- filename
# 合并分支
git merge
# 合并提交
git rebase [-i]
# 撤销
git revert
Git 提交历史
# git 提交历史
git log
# git ref 历史记录
git reflog
Git 标签
# tag 操作
git tag
git tag tag-name
git tag -d tag-name
# 远程 tag
git push origin tag-name ## 推送远程tag
git push origin :refs/tags/tag-name ## 删除远程tag
.gitignore
# 仓库忽略文件, git 索引,仓库忽略下列文件/目录的检查
# vscode 文件夹, / 开头代码当前目录, / 结尾代表屏蔽目录文件
/.vscode/
# bazel 软链接,
/bazel-bin
/bazel-ipcnt_trpc
/bazel-out
/bazel-testlogs
# 当前目录的idea.iml 文件
/idea.iml
# 匹配 .iml 结尾的所有文件
*.iml
git 配置
# local, 存储在 `仓库目录/.git/config`, 优先级高
git config user.name NAME
git config --local user.email EMAIL
# user, 存储在 `$HOME/.gitconfig`, 优先级中
git config --global user.name NAME
git config --global user.email NAME@domain.com
# 替换 `http(s)://xx/` 为 `git@xxx:`,注意/到:的替换
git config --global url.git@xxx.git:.insteadOf http://xxx.git/
git config --global url.git@xxx.git:.insteadOf https://xxx.git/
# system, 优先级低, 存储 /etc/gitconfig 或 $PREFIX/etc/gitconfig
git config --system $sec.$key $val