git-pro学习总结之git基础
起步
版本控制系统VCS
- 本地
- RCS(补丁)
- 集中化CVCS
- CVS
- Subvertion(SVN)
- Perforce
- 分布式DVCS
- Git
- Mercurial
- Bazaar
- Darcs
- BitKeeper
git配置
- 全局配置(服务端)
/etc/gitconfig 或安装目录/mingw64/etc/gitconfig --system读写 - 用户配置(客户端)
/.gitconfig或/.config/git/config --global读写 - 仓库配置
当前仓库. git/config
git基础
获取仓库
- 初始化(git init)
- 克隆(git clone)
更新仓库
- git status 检查文件状态
加参数 -s 表示状态简览- 文件状态
- untracked未跟踪
- unmodified未修改
- modified已修改
- staged已暂存
- 文件标记
$ git status -s
M README
MM Rakefile
A lib/git.rb
M lib/simplegit.rb
? ? LICENSE.txt- 单M标记 文件被修改但未放入暂存区
- 双M标记
左侧M:文件被修改并放入了暂存区
右侧M:文件被修改但未放入暂存区 - A:新添加到暂存区文件
- ??:新添加的未被跟踪文件
- 文件状态
- git add 跟踪新文件或暂存已修改文件
- . gitignore 忽略文件
- 格式规范
- 所有空行或者以 # 开头的行都会被 Git 忽略
- 可以使用标准的 glob 模式匹配
- glob模式
shell所使用码简化了的正则表达式
- glob模式
- 匹配模式可以以(/)开头防止递归
- 匹配模式可以以(/)结尾指定目录
- 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反
- 格式规范
- git diff 查看已暂存或未暂存的修改
- 不加参数:未暂存的修改变化
- --cached 或staged :暂存的修改变化
- mkdir -p ../update && git diff c2 c1 --name-only | xargs -t -i{} cp --parents {} ../update
复制差异文件
- git commit 提交更新
- git commit -a 跳过使用暂存区域,暂存已跟踪修改文件并提交
- git rm 移除文件
rm:工作目录中删除但未暂存- --cached 从暂存区移除,标记为未跟踪
- 不加参数 从工作目录删除且暂存,下次提交后不纳入版本管理
- -f 删除前已修改且放入暂存区
- git mv 移动文件
- 相当于执行3个命令
mv a b
git rm a
git add b
- 相当于执行3个命令
查看提交
- git log -p -2 最近2次提交差异
- git log --stat 文件修改简述
- git log --pretty=oneline 每次提交信息在一行中描述,包含哈希值和提交说明
- git log --since=2.weeks 最近2周内提交历史
撤销操作
-
git commit --amend 覆盖最近一次提交
-
git reset HEAD
撤销暂存文件 -
git checkout --
撤销单个文件修改,还原顺序:暂存文件>最近一个提交文件 -
git checkout . 撤销当前目录文件修改
-
git clean -f 删除 untracked files
-
连 untracked 的目录也一起删掉
git clean -fd -
连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
git clean -xfd -
在用上述 git clean 前,墙裂建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
git clean -nxfd
git clean -nf
git clean -nfd
使用远程仓库
- 查看远程仓库
- git remote -v
显示读写远程仓库时使用的git保存的简写和其对应的url - git remote show [remote-name]
显示指定远程仓库信息(分支等)
- git remote -v
- git remote add
添加远程仓库 - 从远程仓库抓取与拉取
- git fetch [remote-name]
拉取远程仓库所有分支数据,不会自动合并到本地分支 - git pull [remote-name] [branch-name]
拉取指定分支数据,并尝试自动合并到本地当前分支
- git fetch [remote-name]
- git push [remote-name] [branch-name]
推送到远程仓库 - git remote rename [old-name] [new-name]
重命名运程仓库 - git remote rm [remote-name]
移除远程仓库
使用标签
- 列出标签
- git tag 列出全部标签
- git tag -l 'v1.8.5*' 列出指定匹配模式标签
- git show v1.8.5
显示标签 - 创建标签
- 附注标签(annoted)
可添加额外标签信息- git tag -a v1.1 -m 'my version1.0'
最近提交打标签 - git tag -a v1.0 9fce b02
指定提交打标签
- git tag -a v1.1 -m 'my version1.0'
- 轻量标签(lightweigth)
- git tag v1.2
- 附注标签(annoted)
- git push origin [tagname]
共享标签 - git check -b [branchname] [tagname]
签出包含指定标签名的分支
使用别名
- 内部命令
- git config --global alias. unstage 'reset HEAD --'
'git reset HEAD --'用unstage替换,下面2个命令等价
git unstage fileA
git reset HEAD -- fileA
- git config --global alias. unstage 'reset HEAD --'
- 外部命令
使用!前缀区分- git config --global alias.visual '!gitk'