Git配置
git config [--global/system] <参数(例如下面)>
* git config user.name <名字>
* git config user.email <邮箱>
* git config --system alias.st status
取消设置
git config --unset [--global/system] <参数>
初始化仓库
* 初始本地仓库
* git init [--bare] [仓库名称(创建文件夹的名称)]
* --bare 代表仅创建包含Git版本管理文件,即仅普通创建后的.git目录
* 仓库名称不输入时,以当前目录为根目录
* git clone <远程仓库路径>
添加修改文件进暂存区
* git add <文件名> [文件名2] ...
* git add . #添加所有
* git add -u #可以添加删除的文件到暂存区
* git mv welcome.txt README # 直接移动
* git add -i # 选择性提交
查看暂存区状态
git status
git status -s
git rm <file>
git reset #仅改变暂存区
git reset - -hard HEAD^ #改变引用,暂存区,工作区
git reset [- -soft | - -mixed | - -hard | - -merge | - -keep] [-q] [<提交ID>]
参数:- -hard 替换引用,暂存区,工作区
- -soft 只改变引用
- -mixed 只改变引用,暂存区
查看文件
git ls-files --with-tree=HEAD^
git ls-files -s #显示暂存区的目录
git cat-file -t “ID” #查看类型
git cat-file -p “ID” #查看对象内容
git cat-file -p HEAD^:welcom.txt
提交进本地仓库
* git ci [--allow-empty] -m “提交说明"
* git commit --amend #进入vi修改最后一次提交说明
* git commit --amend --reset-author #修改重置当前用户
* git ci -a "提交说明" #对所有变更文件提交
标识符解析git rev-parse
* --show-prefix显示相对目录 --Git-dir显示Git版本库的位置 --show-cdup显示当前工作区目录的深度 --parseopt解析命令行参数
* --symbolic --glob=refs/* 显示定义的所有引用。其中refs/remotes/目录下的引用称为远程分支(或远程引用)
* HEAD 显示HEAD对应的SHA1哈希值
* A^{tree} A: 显示里程碑A对应的目录树
* A^{tree}:src/Makefile A:src/Makefile 显示树里面的文件
* :/"搜索文本" 通过在提交日志中查找字串的方式显示提交
查看日志 git log
git log # 普通内容
git log --pretty=oneline #显示一行
git rev-list [版本] #查看本版本之前的历史记录
--graph 视图
-n 显示条数
-p 显示具体改动
--stat 仅显示改动文件
--pretty=raw 显示原始数据,显示提交树
--pretty=fuller 同时显示作者和提交者
--pretty=oneline
文件对比 git diff
$ git diff B A 比较里程碑B和里程碑A
$ git diff A 比较工作区和里程碑A
$ git diff --cached A 比较暂存区和里程碑A
$ git diff 比较工作区和暂存区
$ git diff --cached 比较暂存区和HEAD
$ git diff HEAD 比较工作区和HEAD
$ git diff <commit1> <commit2> -- <paths> 显示不同版本间该路径下的文件差异
$ git diff <path1> <path2> 可以在Git版本库之外执行,对非Git目录进行比较
$ git diff --word-diff 逐词比较
文件恢复
git checkout -- welcome.txt #使用暂存区恢复工作去
git checkout HEAD #使用主干恢复暂存区和工作区
git reset HEAD #仅暂存区会被恢复
git rm --cached <文件名> #仅从暂存区删除文件
清空工作区中未加入到暂存区的文件和目录
git clean -nd #查看哪些将会删除
git clean -fd #清空
将暂存区写入对象库,然后使用ls-tree,可查看暂存区文件
git write-tree
git ls-tree -l “前面写入返回的ID"
git write-tree | xargs git ls-tree -lrt
保存工作进度
git stash #保存进度
git stash list #显示列表
git stash pop #恢复进度
git stash pop [- -index] [<stash>] #使用- -index将会恢复暂存区
git stash [save [- -patch][-k | —[no-]keep-index][-q | - -quiet][<message>]]
git stash save “just test save message"
远程仓库远程仓库
git push origin master #推送本地master分支到远程仓库origin中
git pull #拉去远程分支
冲突解决
git ls-files -s #查看冲突的文件
git add <file> #重新添加文件即可解决冲突
里程碑
git tag #显示里程碑列表
git tag -n<num> #显示行数几提交说明
git tag -l doc/1.* #通配符过滤
git log - -decorate #日志中显示里程碑
git describe #显示该提交上面的里程碑
git name-rev #会显示里程碑对应分支
创建里程碑git tag
1. <name> [<commit版本号>] #创建名称为name的里程碑
2. -a/m <name> [<commit版本号>] #创建带说明的里程碑
删除里程碑
git tag -d <tag name>
git tag <new tag name> <id> #重命名
git push <remote_url> :<tag name> #删除远程里程碑
共享里程碑
git push origin <tag name>
版本分支 git branch
1. 空参数代表显示分支列表
2. <分支名称> [<commit提交id>] 创建分支,如果填写commit,则以commit创建
3. -d <branch name> 删除分支
4. -m <old branch name> <new branch name> 修改分支名称
* git checkout -b mywork origin 使用origin创建分支mywork
分支合并git merge <分支ID>
git pull
远程版本库地址
1. git remote add <new-name> <path>
2. git remote set-url <name> <new path>
3. git remote rename <new-remote> <ori name>
4. git remote rm <name>
恢复删除的文件
git cat-file -p HEAD^:welcome.txt > welcome.txt
git show HEAD~1:welcome.txt > welcome.txt
git checkout HEAD~1 - - welcome.txt
忽略文件 .gitignore
*.o
*.class
*.obj
git status - -ignored -s #查看忽略文件
git add -f Unit.class #强制加入文件
忽略只对未跟踪文件有效,对于已加入版本库的文件无效
git config - -global core.excludesfile /home/.gitignore #全局独享忽略
文件追溯
git blame <file name> # 查看每行文件的提交记录
git blame -L 6,+5 README #显示从第6行后5行在哪个版本添加
变基操作
git rebase - -onto <newbase> <since> <till>
没有被引用的松散对象
git fsck #查看
git prune #清理所有
查看HEAD变更记录
git reflog show master | head -5
删除错误提交
1. git cherry-pick <commit提交id>
2. git rebase --onto <newbase> <since> [<till>] #变基操作
3. git rebase <since> [<till>]
4. git rebase -i
5. git rebase --continue
6. git rebase --skip
7. git rebase --abort
使用git rebase
git rebase --onto C E^ F
从E到F的提交,重复提交到C上。(包含E提交,因为使用了E^)
归档
git archive -o latest.zip HEAD
git archive -o lastest.zip HEAD src doc
git archive - -format=tar - -prefix=1.0/ first|gzip > foo-1.0.tar.gz