理念 & 技巧 & 提示
-
git 关键词 & 特性
分布式 交换 版本控制 可离线 分支 基于修改
-
代码位置
仓库外 - 工作区(
Working Directory
) - 暂存区(stage
) - 版本库(Repository
) - 远程库(origin
)
-
缺点
- 只能跟踪管理文本文件
-
指针 - (
HEAD
->master
->a commit
)HEAD
- 当前的commit
版本HEAD^
- 前一个commit
版本HEAD^^
- 前两个commit
版本HEAD~n
- 前n
个commit
版本 -
.git
- 用来管理 git 的目录, 默认隐藏, 用ls -ah
命令可以看见 -
origin
- 远程库的默认名字
命令
命令 | 命令作用 | 参数 | 参数作用 |
---|---|---|---|
add | 把文件放到Git仓库/暂存区 | <file> | 要提交的文件及路径 |
commit | 提交修改到本地的Git 仓库 | -m <mesage> | 提交的描述 |
init | 初始化目录为Git仓库 | ||
status | 查看工作区 和暂存区 的文件更改状态 | ||
diff | 查看工作区 文件的修改 | ``<HEAD~n/commitId> – | 查看 工作区和 版本库`里文件的区别 | |
log | 显示从近到远的commit 记录 | --pretty=oneline | 缩减log 信息到一行 |
--graph | 显示分支图 | ||
--abbrev-commit | 显示短commitId | ||
reset | 回退commit | --hard | |
<HEAD~n/commitId> | 回退版本到某个commit 之前 | ||
<file> | 把暂存区的修改回退到工作区 | ||
reflog | 查看产生修改的命令历史(不包括修改暂存区的) | ||
checkout | 检出 | -- <file> | 根据版本库(commit )恢复工作区 |
<branch-name> | 切换到已有分支 | ||
-b <branch-name> | 创建并切换到(和当前分支一样的)新的分支 | ||
-b <branch> origin/<远程分支名> | 将远程分支创建到本地 | ||
switch | 切换分支 | <branch-name> | 切换到已有分支 |
-c <branch-name> | 创建并切换到(和当前分支一样的)新的分支 | ||
branch | 分支操作 | 查看所有分支以及当前分支 | |
<branch-name> | 创建(和当前分支一样的)新分支(不切换) | ||
-d/-D <branch-name> | 删除(已合并/未合并)分支 | ||
--set-upstream-to=origin/远程分支名 本地分支名 | 指定本地分支 与远程分支 的连接,可以简化命令 | ||
merge | 合并分支 | <branch-name> | 合并某分支到当前分支 |
--no-ff -m "comment of merge commit <branch-name>" | 强制禁用Fast forward 模式,使用一个新的 commit 提交合并,保留合并历史 | ||
rm | 从版本库删除文件 | <file> | 从版本库中删除文件 |
remote | 远程库操作 | 查看远程库名称 | |
-v | 查看远程库信息 | ||
add <远程库名> 远程库[SSH/HTTP]地址 | 为本地仓库 添加关联的远程仓库 | ||
rm <远程库名字> | 删除已有的远程库 | ||
push | 把分支推送到远程库 | origin <要推送的本地分支名> | 选择要推送的分支 |
-u | 把推送的本地分支与远程库中对应的分支关联起来,在以后push/pull 时简化命令,直接用git push/pull ,省略origin <branchname> | ||
origin <tag-name> | 推送某个标签到远程库 | ||
origin --tags | 推送所有标签到远程库 | ||
origin :refs/tags/<tag-name> | 删除远程标签(已删除本地标签) | ||
clone | 把远程库拷贝到本地 | git[SSH/HTTP]地址 | 远程库地址,(github/gitlab 会提供) |
stash | 把当前工作区 的修改暂时"储藏"起来,以清空工作区 | ||
list | 查看所有的stash | ||
apply [stash@{0}] | 恢复但不删除stash ,(可指定版本) | ||
drop [stash@{0}] | 删除stash ,(可指定版本) | ||
pop [stash@{0}] | 恢复并删除stash ,(可指定版本) | ||
cherry-pick | 把某个分支某次提交的修改应用到当前分支 | <commitId> | 应用commitId 对应的commit |
rebase | 在一个分支的commit 末尾commit 另一个分支 | ||
tag | commit 的标签,别名,标签可以跟随commit 出现多次 | 查看所有tag ,结果不是按时间顺序而是按字母顺序 | |
<tag-name> | 给当前分支最新提交的commit 打上标签 | ||
<tag-name> <commitId> | 给某次commit 打标签 | ||
-a <tag-name> -m "comment message" | 给某次commit 打带有说明的标签 | ||
-d <tag-name> | 删除一个标签 | ||
show | 查看标签信息 | 查看当前commit 信息 | |
<tag-name> | 查看某个tag 对应commit 的信息 | ||
config | 配置git 仓库 | --global | 为电脑的所有仓库进行配置 |
color.ui true | 让git 显示颜色 | ||
user.name "username" | 设置Git仓库 的用户名 | ||
user.email "email" | 设置Git仓库 的邮箱 | ||
alias.别名 全称 | 为命令配置别名 |
场景
提交一个文件
git add readme.txt
geit commit -m "can't ignore this commit"
遇到冲突
先把有冲突的分支pull
下来,在本地解决冲突然后再push
优化配置
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.unstage 'reset HEAD'
git config --global alias.last 'log -1'
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
cat .git/config
安装 & 配置 & 使用(mac
)
本地使用
-
安装
- 通过 homebrew
- 从AppStore安装Xcode -> 运行Xcode -> Xcode -> Preferences -> Downloads -> Command Line Tools -> Install
-
配置
[ - - global ] 意思是为这台电脑的所有用户设置
git config --global user.name "Your Name" git config --global user.email "email@example.com"
-
初始化一个 git 目录
git init
连接远程库
-
创建SSH Key, 一台电脑对应一个
ssh key
检查用户主目录下有没有
.ssh
目录,.ssh
里有没有id_rsa
和id_rsa.pub
两个文件,如果没有,执行以下命令ssh-keygen -t rsa -C "youremail@example.com"
-
在
远程Git仓库
里配置上一步得到的秘钥id_rsa.pub
-
在
远程Git仓库
中创建需要的仓库 -
开始
-
为
本地仓库
添加关联的远程仓库
git remote add origin git[SSH/HTTP]地址
-
从
远程仓库
拷贝仓库到本地git clone git[SSH/HTTP]地址
-