查看某个文件历史
git log --pretty=oneline 文件名
:列出文件的所有改动历史git show c178bf49
:某次的改动的修改记录git log -p c178bf49
:某次的改动的修改记录git blame 文件名
:显示文件的每一行是在那个版本最后修改。git whatchanged 文件名
:显示某个文件的每个版本提交信息:提交日期,提交人员,版本号,提交备注(没有修改细节)
打造自己的git命令
代码语言:javascript复制git config --global alias.st status
git config --global alias.br branch
git config --global alias.co checkout
git config --global alias.ci commit
配置好后再输入git命令的时候就不用再输入一大段了,例如我们要查看状态,只需输入:
代码语言:javascript复制git st
中文乱码的解决方案
代码语言:javascript复制git config --global core.quotepath false
新建仓库
初始化
代码语言:javascript复制git init
获取状态
代码语言:javascript复制git status
添加
代码语言:javascript复制git add file # .或*代表全部添加
git rm --cached <added_file_to_undo> # 在commit之前撤销git add操作
git reset head # 比上面更方便的方法
提交更新
代码语言:javascript复制git commit -m "message" #此处注意乱码
远程
代码语言:javascript复制git remote add origin git@github.com:JSLite/test.git # 添加源
推送
代码语言:javascript复制git push -u origin master # push同时设置默认跟踪分支
git push origin master
git push -f origin master # 强制推送文件,缩写-f(全写--force)
克隆
代码语言:javascript复制git clone git://github.com/JSLite/JSLite.js.git
git clone git://github.com/JSLite/JSLite.js.git mypro # 克隆到自定义文件夹
git clone [user@]example.com:path/to/repo.git/ # SSH协议还有另一种写法。
git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等,下面是一些例子。git clone <版本库的网址> <本地目录名>
$ git clone http[s]://example.com/path/to/repo.git/
$ git clone ssh://example.com/path/to/repo.git/
$ git clone git://example.com/path/to/repo.git/
$ git clone /opt/git/project.git
$ git clone file:///opt/git/project.git
$ git clone ftp[s]://example.com/path/to/repo.git/
$ git clone rsync://example.com/path/to/repo.git/
本地操作
获取帮助信息
代码语言:javascript复制git help config
添加
代码语言:javascript复制git add * # 跟踪新文件
git add -u [path] # 添加[指定路径下]已跟踪文件
移除文件
代码语言:javascript复制rm * & git rm * # 移除文件
git rm -f * # 移除文件
git rm --cached * # 取消跟踪
git mv file_from file_to # 重命名跟踪文件
查看提交记录
代码语言:javascript复制git log # 查看提交记录
提交更新
代码语言:javascript复制git commit # 提交更新
git commit -m 'message' # 提交说明
git commit -a # 跳过使用暂存区域,把所有已经跟踪过的文件暂存起来一并提交
git commit --amend # 修改最后一次提交
git commit log # 查看所有提交,包括没有push的commit
git commit -m "#133" # 关联issue,任意位置带上#符号加上issue号码
git commit -m "fix #133" # commit关闭issue
git commit -m '概要描述'$'nn''1.详细描述'$'n''2.详细描述' # 提交简要描述和详细描述
撤销更新
代码语言:javascript复制git reset HEAD * # 取消已经暂存的文件
git reset --mixed HEAD * # 同上
git reset --soft HEAD * # 重置到指定状态,不会修改索引区和工作树
git reset --hard HEAD * # 重置到指定状态,会修改索引区和工作树
git reset -- files * # 重置index区文件
撤销操作
代码语言:javascript复制git revert HEAD # 撤销前一次操作
git revert HEAD~ # 撤销前前一次操作
git revert commit # 撤销指定操作
切换分支和恢复文件
代码语言:javascript复制git checkout -- file # 取消对文件的修改(从暂存区——覆盖worktree file)
git checkout branch|tag|commit -- file_name # 从仓库取出file覆盖当前分支
git checkout HEAD~1 [文件] # 将会更新working directory去匹配某次commit
git checkout -- . # 从暂存区取出文件覆盖工作区
git checkout -b gh-pages 0c304c9 # 这个表示从当前分支commit哈希值为0c304c9的节点,分一个新的分支gh-pages出来,并切换到gh-pages
查看差异
代码语言:javascript复制git diff file # 查看指定文件的差异
git diff --stat # 查看简单的diff结果
git diff # 比较Worktree和Index之间的差异
git diff --cached # 比较Index和HEAD之间的差异
git diff HEAD # 比较Worktree和HEAD之间的差异
git diff branch # 比较Worktree和branch之间的差异
git diff branch1 branch2 # 比较两次分支之间的差异
git diff commit commit # 比较两次提交之间的差异
git diff master..test # 上面这条命令只显示两个分支间的差异
git diff master...test # 你想找出'master'、'test'的共有父分支和'test'分支之间的差异,你用3个'.'来取代前面的两个'.'
储藏现场
代码语言:javascript复制git stash # 将工作区现场(已跟踪文件)储藏起来,等以后恢复后继续工作。
git stash list # 查看保存的工作现场
git stash apply # 恢复工作现场
git stash drop # 删除stash内容
git stash pop # 恢复的同时直接删除stash内容
git stash apply stash@{0} # 恢复指定的工作现场,当你保存了不止一份工作现场时。
合并
普通合并
代码语言:javascript复制git merge --squash test # 合并压缩,将test上的commit压缩为一条
拣选合并
代码语言:javascript复制git cherry-pick commit # 拣选合并,将commit合并到当前分支
git cherry-pick -n commit # 拣选多个提交,合并完后可以继续拣选下一个提交
变基
代码语言:javascript复制git rebase master # 将master分之上超前的提交,变基到当前分支
git rebase --onto master 169a6 # 限制回滚范围,rebase当前分支从169a6以后的提交
git rebase --interactive # 交互模式,修改commit
git rebase --continue # 处理完冲突继续合并
git rebase --skip # 跳过
git rebase --abort # 取消合并