git常用命令
添加到暂存区
全部场景
git add -A .
git add -A :/
特殊场景
git add filename
git rm filename
git mv filename
回退commit
- git reset HEAD filename 从暂存区撤销
- git reset --hard 3628164 直接把所有文件回滚版本
- 回退某个文件到特定版本
git log Default@2x.png
git reset 9aa51d89799716aa68cff3f30c26f8815408e926 Default@2x.png 此时只是将本地版本库回滚到这个版本
git checkout Default@2x.png 此时才将文件回滚,并将文件处于修改状态
git commit -m "revert old file" 此时可以将文件回滚提交
从仓库还原
- git checkout filename
从暂存区撤销
- git reset HEAD ...
- 撤销后再从仓库还原就能得到原状态的文件
查看文件
- git ls-files
提交文件
- git commit -m "commit message"
忽略版本控制
.gitignore 作用域在当前目录及子目录,而且未被trached, windows下不支持注释
对于已经提交到版本库的,git rm filename && git commit -m "gitignore update"
版本差异比较
- git diff 比较暂存区(有已经add的) 和 工作区(未add加入版本控制的不会比较), 在未add时等同于git diff HEAD
- git diff --cached 比较暂存区和版本库
- git diff HEAD 比较工作区和版本库
- git diff 版本号 版本号 比较版本库的内容
- git diff 版本号 比较当前版本和历史版本的内容
- git diff HEAD^ 比较当前版本和上一版本
- git diff HEAD^^ 比较当前版本和上上一版本
- gitk& 查看版本记录及版本树
创建分支
- git checkout -b work_branch
绑定远程分支,提交
- git remote add origin https://github.com/luoziyihao/resume.git
- git push -u origin master
从远程分支 pull
- git fetch origin
- git merge origin/master
git特殊场景
- 如果一个项目下有几层目录,每层目录下均有一个 .git, 每个.git的范围都是.git 所在目录及子目录; 针对这种情况, 每个git 命令的作用域均为其最近的上层或同层目录中的 .git文件
- .git不识别目录,只有当目录下存在非目录文件时,目录才会被git识别
- 当有嵌套的.git文件时,只有 子目录的git add提交后,父目录的git 才能add提交
- 针对这种情况以后的工作习惯是 先提交子,再提交父, down的时候先down副父,再down子。
- 最好不采用该种目录结构
查看分支
- git branch
常规问题
- HEAD detached at bfb8e41
git checkout 的作用是让HEAD头指针指向对应的分支,有时侯也会指向对应的提交 ID ,比如 git commit bfb8e41 或者误操作后,这个时候如果想还原可以采取一下操作
git check -b detachedfix 意思是在当前的头指针指向的地方建立分支
git rebase master 将主分支的更改合并到detachedfix分支
git checkout master 切换到master分支
git merge detachedfix 将修补分支的更改合并到主分支
git config core.ignorecase false 忽略大小写关闭,默认是忽略大小写的
冲突
rebase 问题
http://www.cnblogs.com/sinojelly/archive/2011/08/07/2130172.html
修改冲突
git add -u
git rebase --continue
不停的 合并并执行上面三步,解决所有问题,完结后不需要commit
merge问题
修改冲突
git add -u
不停的 合并并执行上面两步,解决所有问题,最后一定要 commit
关于rebase 后重复 rebase 冲突的问题
`
要慎用rebase, 当该版本的patch 已经rebase 过后, 即master 分支已经合并到本地时, 不要再 rebase, 否则会产生莫名奇妙的冲突.
rebase 前可以先看一下最新的 master 是否在 develop 内, 如果有就不用rebase了, 直接在 master merge 即可.
`
正确的顺序应该是
git merge origin/master //master
git rebase master //test 分支
git merge test //master 分支
git push -u origin master // master分支
免密码输入
git config --global credential.helper store
在仓库中去掉已经加进去的文件
git rm --cached file
gitignore策略
*dir* dir/
List all commits for a specific file
git log -p file
git log --follow file