关闭

Git简单使用

167人阅读 评论(0) 收藏 举报

官网git-scm和书ProGit,在线阅读可以选择中文版
(本文暂时不全。。因为都是自己一个人在搞来搞去,有点难)

规则

忽略规则

.gitignore的格式规范如下
* 所有空行或者以 # 开头的行都会被 Git 忽略。
* 可以使用标准的 glob 模式匹配。
* 匹配模式可以以(/)开头防止递归。
* 匹配模式可以以(/)结尾指定目录。
* 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
例子:

# no .a files
*.a
# but do track lib.a, even though you're ignoring .a files above
!lib.a
# only ignore the TODO file in the current directory, not subdir/TODO
/TODO
# ignore all files in the build/ directory
build/
# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt
# ignore all .pdf files in the doc/ directory
doc/**/*.pdf

Glob模式

所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。
* 星号(*)匹配零个或多个任意字符;
* [abc]匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);
* 问号(?)只匹配一个任意字符;
* 如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。
* 使用两个星号(* ) 表示匹配任意中间目录,比如a/**/z可以匹配 a/z, a/b/z或 a/b/c/z等。

Git命令

初始配置

//如果不加 --global 则配置当前项目
//用户名邮箱
$ git config --global user.name "John Doe"    
$ git config --global user.email johndoe@example.com
//commit message编辑器
$ git config --global core.editor "\"D:\notepad\Notepad++\notepad++.exe\""

检查配置

$ git config --list
$ git config <key>  //查看具体的某一项,例如user.name

帮助

//可以尝试在 Freenode IRC 服务器( irc.freenode.net )的 #git#github频道寻求帮助
$ git help <verb>
$ git <verb> --help
$ man git-<verb>

获取Git仓库

//现有目录中初始化
$ git init
//克隆现有的仓库
$ git clone -o remoteName [url] myName//-o后参数改变远程缩写命名(默认origin),myName为重命名

常用命令

结果标志具体说明,查看原书2.2章

$ git status -s  //使用-s或者-sort进行排版
$ git add (files)  //例如README; *.txt

diff不同

$ git diff  //比较的是工作目录中当前文件和暂存区域快照之间的差异
$ git diff --staged  //查看已暂存的将要添加到下次提交里的内容
//图形化插件
$ git difftool --tool-help  //查看支持哪些
$ git difftool --tool=<tool>  //这个是一次性的,网上有通过配置config来永久实现的。

Commit提交

$ git commit  //直接可以弹出编辑器编辑信息(有配置的话)
$ git commit -m 'initial project version'  
//如果文件有过一次add(tracked状态),那么可以使用-a来跳过修改后的add操作
$ git commit -a -m 'added new benchmarks'  
$ git commit --amend  //在上一次commit之后且无内容修改时使用,只修改commit message

移除文件

$ git rm README //删除文件之后,必须要在git中取消track
$ git rm -f README  //强制(force)删除
$ git rm --cached README  //只删除tracked 
$ git rm log/\*.log  //支持glob模式。注意\

移动文件

git不显示记录文件移动

$ git mv file_from file_to  //文件改名,需要tracked
> 实际上执行了 
> $ mv README.md README
> $ git rm README.md
> $ git add README

查看历史

这张内容较多,仅列出部分以示说明

$ git log
//-p 显示每次提交的内容差异
//-n 限制最近提交次数,比如-2为最近两次
//--stat 列出具体修改数据
//-g 带引用日志信息
$ git log -p -<n> --stat
//查看各个分支当前所指的对象
$ git log --oneline --decorate
$ git log --oneline --decorate --graph --all
// --pretty 控制显示的格式,
$ git log --pretty=oneline  //short,full,fuller
$ git log --pretty=format:"%h - %an, %ar : %s"
//条件限制
$ git log  --author=gitster --since="2008-10-01" \
--before="2008-11-01" --no-merges -- t/

日志的引用

$ git reflog   //最近几个月
$ git show HEAD@{n}    //n可以在reflog结果中看到
$ git show master@{yesterday}  //昨天时master分支顶端指向哪
$ git show HEAD^1  //查看HEAD的父提交,1表示第一个,2则表示第二个父提交
$ git show HEAD~2 //查看HEAD第一父提交的第一父提交

日志区间

$ git log master..tempBranch //查看在tempBranch但不在master上的提交,如果有一边留空,默认为HEAD
$ git log master ^tempB --not tempB    //表示查看master上,但不在tempB上的提交。
$ git log --left-right master...experiment //三点表示在其中一个分支,但不同时在两个分支的提交。

撤销

//撤销add的文件
$ git reset HEAD <file>  
//撤销修改(还原至刚获取状态)
$ git checkout -- CONTRIBUTING.md  //慎用

远程仓库的使用

$ git clone https://github.com/schacon/ticgit  //在当前目录创建ticgit,以origin为shortname
$ cd ticgit  //进入新的ticgit目录
$ git remote  //显示远程仓库名,至少存在origin  
//显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL
$ git remote -v  
$ git remote show origin  //查看origin的更多信息
$ git remote add <shortname> <url>  //添加远程仓库
$ git remote rename <name_from> <name_to>  //远程后仓库重命名
$ git fetch [remote-name]  //从远程仓库中获取数据,可以使用上面的shortname
$ git push [remote-name] [branch-name]  //推送
$ git remote rm [remote-name]  //移除远程仓库

标签

$ git tag  //列出已有标签
$ git tag -l 'v1.8.5*'  //v1.8.5的限制条件
$ git tag -a v1.4 -m 'my version 1.4'  //-a表示创建附注标签
$ git show v1.4  //显示信息
$ git tag v1.4-lw  //创建轻量标签,只需要名字
$ git tag -a v1.2 9fceb02  //对已有提交补标签,末尾指定提交的校验和(或部分校验和)
$ git push origin v1.5  //默认push不传送标签
$ git push origin --tags  //push所有远程上没有的全部标点
$ git checkout -b [branchname] v2.0.0  //你可以使用tag来创建分支bTag,但是如果bTag进行commit,那么分支的内容变化了,而tag没有。

别名

为命令创建别名

$ git config --global alias.co checkout  //以后可以使用 $ git co 来代替 git checkout
$ git config --global alias.unstage 'reset HEAD --'
$ git config --global alias.last 'log -1 HEAD'
//执行外部命令
$ git config --global alias.visual '!gitk'

分支创建删除合并

$ git branch [branchname]  //还在当前分支
$ git checkout [branchname]  //切换分支
$ git checkout -b [branchname] (fromBranchName) //新建分支并切换
$ git merge [branchname]  //当前分支与该分支合并
$ git branch -d [branchname]  //删除分支,-D 强制删除
//图形化工具
$ git mergetool //会提示有那些工具可用

分支管理

$ git branch  //查看所有分支列表
$ git branch -v  //查看每个分支的最后一次提交
$ git branch -vv //包含-v 以及远程分支信息
$ git branch --merged  //查看哪些分支已经合并到当前分支
$ git branch --no-merged  //没有合并只能强制删除

远程分支

$ git ls-remote (remote)  
$ git remote show (remote)
//推送
$ git push (remote) (loacalBranchName):(remoteBranchName)
//拉取
$ git fetch origin
$ git pull  //等于fetch之后merge
//跟踪
$ git checkout --track remote/branchName
$ git checkout -b sf remote/branchName
$ git branch -u remote/branchName  //-u 同 --set-upstream-to
//删除
$ git push origin --delete (remoteBranchName)  //移除指针,数据等垃圾回收

变基


$ git rebase master //将当前分支发快照重放到master分支,注意使用的还是分支引用
$ git rebase --onto master (notInThisBranch) (inThisBranch)
$ git rebase --onto (targetBranch) (sourceBranch) 

交互式暂存

$ git add -i   //交互模式
$ git add -p   //部分补丁

储藏与清理

$ git stash
$ git stash list
$ git stash apply --index
$ git stash drop
$ git stash --keep-index
$ git stash -u

【3.5、3.6、7.3】节没看明白

问题

1、LF\CRLF问题

场景:
创建AS项目之后,使用git add出现:

warning: LF will be replaced by CRLF in …
The file will have its original line endings in your working directory.

说明:
LF表示(换行符,’\n’),CR表示(回车,’\r’)
就是警告行尾标志会被替换,然后说明使用的时候会换回来
解决:
听起来是自动转换的,挺好的功能。但是强迫症表示看到提示就一副失败的感觉
所以:git config (–global) core.autocrlf false ,–global可选
如果还不明白:http://www.tuicool.com/articles/IJjQVb

2、远程仓库概念

场景
z在本地文件夹A下创建一个git仓库,如TestGit,使用命令clone到本地另一个文件夹下TestGit (clone),此时用后者查询 git remote -v,可以看到远程仓库是前者。但是为什么从前者查询,远程仓库也是后者?

3、git快照实现原理

k书中说主要存储快照,而分支只存储校验和,那么如何实现校验和到对应文件的转换?

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:51384次
    • 积分:580
    • 等级:
    • 排名:千里之外
    • 原创:21篇
    • 转载:4篇
    • 译文:2篇
    • 评论:14条
    博客专栏
    最新评论