文章目录
Git
工作原理
git 维护三棵树:
- working directory:工作目录
- stage(index):缓存
- history:commit 历史
可以参考这个 图解 Git 命令
获取/创建项目
init
git init
git init <directory>
git init --bare <directory>
初始化一个裸的(没有工作目录的) Git 仓库,中央仓库应该总是用 --bare 标记创建,因为向非裸仓库推送分支有可能会覆盖已有的代码变动。将 bare 看作是将仓库标记为储存设施而不是开发环境,中央仓库是裸仓库,开发者的本地仓库是非裸仓库。
clone
# 将位于 <repo> 的仓库克隆到本地机器
git clone <repo>
# 将位于 <repo> 的仓库克隆到本地机器上的 <directory> 目录
git clone <repo> <directory>
LF CRLF
clone 下来的东西报 lf crlf 的错误,是由于 git clone 的时候自动进行了转换,可以如下设置关闭
git config --global core.autocrlf false
submodule
可以通过 git submodule 配置子模块,git 会在父级目录中用 .gitmodules 文件记录
配置
config
常见配置
git config user.name <name>
git config --global user.name <name>
git config --global user.email <email>
# 为 git 命令创建一个快捷方式(别名)
git config --global alias.<alias-name> <git-command>
# 定义当前机器所有用户使用命令时用到的文本编辑器
git config --system core.editor <editor>
# 用文本编辑器打开全局配置文件,手动编辑
git config --global --edit
git 的配置项存储位置:
- /.git/config – 特定仓库的设置。
- ~/.gitconfig – 特定用户的设置。这也是
--global
标记的设置项存放的位置。 - $(prefix)/etc/gitconfig – 系统层面的设置。
忽略特定文件
git update-index --assume-unchanged PATH
# 如果想撤销这个操作
git update-index --no-assume-unchanged PATH
基本快照操作
add
将工作目录中的变化添加到缓冲区,缓存更改
git add <file>
git add <directory>
# 交互式的缓存
git add -p
# 可以控制那些行被加进去
git add --edit
commit
将缓存的快照提交到项目历史
# 运行文本编辑器,等待输入提交信息
git commit
# 将 <message> 作为提交信息
git commit -m "<message>"
# 自动添加缓冲和提交,除了 new files
git commit -a
# 合并 index 和上一次 commit 提交,且不修改 commit message
# amend 会修改 commit 的 hash 值,无论有没有实际文件变化/message 变化
git commit --amend --no-edit
# 强制设定 commit 日期
git commit --date=<date>
status
git status
文件状态:
- modified, to be commited:已缓存
- not staged for commit:未缓存
- untracked:未追踪
rm
# = rm 且默认(-f&#