设置
git config --global user.name "Your Name" git config --global user.email "Your E-Mail" git config --global core.editor vim git config --global merge.tool vimdiff git config --list # 显示当前的配置 git config --global core.autocrlf false # 停止换行的自动转换
初始化或者Clone一个库
git init # 初始化一个新的空库
git clone URL # 克隆一个远程库
git clone --bare URL # 克隆不带工作目录的纯库
文件操作相关
git status # 查看状态 # 将修改添加到Stage git add . # 当前目录所有已在版本库中的文件 git add file # 添加文件 git diff # 查看修改 git diff --cached # 查看已经暂存的差异 git commit # 将已加到Stage的文件提交到库中 git commit -m "修改注释" git commit -a -m "修改注释" # 直接将已跟踪的文件,添加到Stage并提交 git rm # 删除文件 git rm -f # 已修改的文件 强制删除 git rm --cached # 删除,但保留文件在磁盘 git mv # 移动 重命名 git checkout file # 将文件恢复到上次提交的状态,撤销修改 git checkout -- ./ # 撤销当前目录所有修改
gitignore
.gitignore # 添加忽略项到这个文件中 # 此为注释 – 将被 Git 忽略 *.a # 忽略所有 .a 结尾的文件 !lib.a # 但 lib.a 除外 /TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO build/ # 忽略 build/ 目录下的所有文件 doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
查看提交历史
git log git log -p -2 # -p 展开内容差异 -2 显示最近2次提交 git log --stat # 显示统计 git log --graph # 图形化地显示提交历史 git log --pretty=oneline # oneline, short, full, fuller git log --since --after --until --before --author --committer --grep git log --pretty=format:"%h - %an, %ar : %s"
修改和撤销提交
# 修改最后一次提交 git commit -m "foo" git add forgotten_file git commit --amend # 只产生一个提交 # 撤销暂存 git reset HEAD some_file # 回到上一次提交 git reset HEAD^ --soft # 文件修改保留 HEAD^表示HEAD的父提交 git reset HEAD^ --hard # 不保留文件修改
远程库
git remote # 查看当前的远程库 git remote -v # 更详细 git remote add [name] [url] # 添加远程仓库 git fetch [remote-name] # 从远程仓库抓取数据 git fetch origin # 从服务器抓取最新的提交,不合并 git pull # 从服务器抓取,并合并到工作目录 git push [remote-name] [branch-name] # 推送数据到远程仓库 git remote show origin # 查看远程仓库信息 git remote rename pb paul # 重命名远程仓库 git remote rm pb # 删除远程仓库
tag
git tag # 列出已有的标签 git tag -l "v1.4*" # 过滤 # 新建tag git tag -a v1.4 -m "标签注释" git show v1.4 # 显示标签信息 # 后期加标签 git log --pretty=oneline # 找到对应提交的校验 git tag -a v1.2 9fceb02 # 追加到校验上 # 分享标签 git push origin v1.5 # 推送某个标签 git push origin --tags # 所有的标签都推送
分支
git branch testing # 创建分支 git checkout testing # 切换工作目录到分支 git checkout -b iss53 # 创建分支并切换到分支 git checkout -b my2.6.14 v2.6.14 # 从tag创建一个分支并checkout git checkout -b serverfix orign/serverfix # 从远程分支创建一个分支,并checkout git branch --set-upstream branch remotebranch # 将已有分支跟踪远程分支 git branch --track localbranch remotebranch # 将本地分支跟踪到远程分支 git branch -d iss53 # 删除一个分支 git branch # 列出分支 git branch -v # 列出分支详细信息 git branch -r # 列出远程分支 git branch --merged # 已合并的分支 git branch --no-merged # 未合并的分支 git push origin serverfix # 推送分支到远程 git push origin :serverfix # 从远程删除分支 git merge anotherbranch # 合并另一个分支到当前分支 git merge anotherbranch --no-commit # 合并分支但不提交
rebase 保持干净的提交历史
git rebase master
清空工作目录
git clean -x -d -f -x 将忽略的文件一起删除 -d 将目录删除
将已删除的文件添加到暂存
git add -u
导出某个分支到指定目录
git archive master | tar -x -C /some/path
子模块
git submodule add git://github/foobar.git git submodule init git submodule update