git恢复文件
git checkout — filename
git reset HEAD — filename
git config –global alias.unstage ‘reset HEAD –’
git config –global alias.restore ‘checkout –’
git log filename
git reset <hash> filename
这个时候回退的文件是在缓冲区
需要git commit -m ‘revert filename’
git checkout <hash> filename 这里是直接恢复了,不安全
git reset 的时候把缓冲区的文件都移动出来
设置别名
git config –global alias.ci commit
git config –global alias.co checkout
git config –global alias.unstage ‘reset HEAD’
git config --global alias.lg "log --color --graph --pretty=format:‘%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset‘ --abbrev-commit"
忽略文件
.gitignore
# 这行是注释 *.a # 忽略所有 .a 伟扩展名的文件 !lib.a # 但是 lib.a 不忽略,即时之前设置了忽略所有的 .a /TODO # 只忽略此目录下 TODO 文件,子目录的 TODO 不忽略 build/ # 忽略所有的 build/ 目录下文件 doc/*.txt # 忽略如 doc/notes.txt, 但是不忽略如 doc/server/arch.txt
增加颜色
git config –global color.ui true
打标签
git tag v1.1
git tag -a v1.1 -m ‘stable version 1.1
git tag
git show v1.1
git tag v1.2 <hashcode>
git push origin v1.1 推送一个标签
git push origin –tags
git tag -d v1.1
git push origin :refs/tags/v1.1 删除远程标签
多人协作
git remote
git remote -v
git push origin master
git push origin dev
并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?
- master分支是主分支,因此要时刻与远程同步;
- dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
- bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
- feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
- 总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!
抓取分支
git clone git@git.oschina.net:human/data.git
默认是在master分支
git branch
git checkout -b dev origin/dev 创建分支,到远程
git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接
$ git branch –set-upstream dev origin/dev
git工作现场的保护和恢复
git stash
查看暂存列表
git stash list
应用 git stash apply stash@{0}
删除git stash drop stash@{0}
应用+删除 git stash pop
git stash clear
注意 stash@{0}是最近一次压入的
git 日志
显示分支:
git log –graph –pretty=oneline –abbrev-commit
用git log –graph命令可以看到分支合并图。
查看所有提交的Hash值
git reflog
回滚到指定的版本
git reset –hard <hash>
恢复文件
如果只是在工作区对文件进行修改,直接从本地仓库从新读取。
git checkout — filename
如果文件已经提交到缓存区,先把文件从缓存区移动出来,然后同上
git reset — filename
增加缓冲区,提交到本地仓库
git add -A 在工作目录,提交未跟踪的文件和已经跟踪的修改的文件到缓存区
git add -u 在工作目录,提交已经跟踪的文件且修改的文件到缓存区
git commit
git commit -m ‘message add here’
git commit -a 在工作目录,提交已经跟踪的文件且修改的文件到本地仓库
文件比较
git diff HEAD~2 HEAD~1 README.md
git diff README.md
git diff HEAD~1 README.md
git diff HEAD~2 README.md
如果文件已经提交到缓冲区:
git diff –cached
分支:
git branch 显示所有分支
git branch -a 查看远程分支
git remote add origin git@github.com:huangjunhua/bugfreejs.git
git remote rm origin
git push origin dev 把分支dev推送到远程
git checkout branchName 切换到指定分支
git checkout -b branchName 新建分支
相当于: git branch branchName; git checkout branchName
git branch -d dev 删除分支dev
git branch -D dev 强行删除分支
在master分支上执行:
git merge dev 合并dev到master分支上
git merge --no-ff -m "merged bug fix 101" issue-101