git总结
今天上午因为分支提交问题影响了工作,晚上进行总结学习:
=================================================
一、准备:
1.使用git help:
git help
git help -a 所有参数
git help -g 打开手册
查看某个命令 git help add
2.git的设置
git system 系统范围
git global 用户范围
git local 仓库范围
git config --global user.name '胡浩'
git config --list
git config --unset --global user.name
git config --global user.email '947416983@qq.com'
git config --global color.ui true
cat ~/.gitconfig (波浪号表示当前用户主目录)
3.别名 alias
git config --global alias.co checkout
//设置checkout的别名为co
cat ~/.gitconfig
在系统上设置别名:
vim ~/.bash_profile
进入编辑器后在最上面加入:
alias gco='git checkout'
source ~/.bash_profile(或者关掉终端再打开终端)
4.忽略跟踪文件(全局范围)
在mac系统上有时候会出现.DS_Store这个文件,我们不希望它进入版本库,
git config --global core.excludesfile ~/.gitignore_global
告诉git全局忽略.gitignore_global这个文件中的东西
vim ~/,gitignore_global
写入.DS_Store 然后:wq保存文件
这样在global范围内不管哪个版本库都会忽略这个文件。
5.忽略跟踪文件(项目级别)
在项目下创建文件
vim .gitignore
写入*.log
注意:git 不会忽略掉已经被跟踪的 可以使用 git rm --cached
二、基础
1.初始化 git init
然后生产.git文件夹 通常不需要动
在unix系统上 默认.结尾是隐藏的
2.提交 git commit
3.对比 git diff
git status 发现有修改
git diff index.html
比较与working directory与staged中的区别
如果暂存了就是比较working directory与暂存区的区别
如果有修改在暂存区,同时源文件又有修改,
git diff
比较working directory与staged中区别
git diff --staged
比较 reponsitory与 staged暂存区中的区别
4.重命名 git rm
如果是style.css
在操作系统中给他重命名了seam.css
这时候git status就会提示你删除了style.css并且有新增的untracked的seam.css
这时候要
git rm style.css
git add seam.css
5.移动(重命名)文件
git mv theme.css naa-theme.css
6.删除文件
git rm 目录 -r(表示递归)
git rm theme.css
7.恢复被删除的文件
git checkout HEAD --(这两个横线表示当前分支) index.html 恢复到当前的一次提交
git checkout HEAD^ -- index.html 恢复到上一次提交
8.恢复历史版本
git log --oneline
git revert 版本号
然后进入编辑器,进行修改后输入:wq退出编辑器
9.重置提交 git reset
默认情况下 每次提交以后指针都会指向最后一次提交
使用git reset控制指针的位置
--soft 软重置 不会改变暂存区和工作区的内容 只改变commit信息
--hard 硬重置 直接把暂存区和工作区的文件内容改变
--mixed (默认是mixed) 它会把暂存区的文件内容改变
git log --oneline ,然后
git reset --soft .... ,然后
git log --onelone ,然后查看一下
git status
10.工作进度 stash
先修改一下Human.txt
这时候我想修改其他的东西,但是不想和humans.txt一起提交,可以把humans.txt暂存起来,
git stash save '修改了 humans.txt'
这个时候查看humans.txt发现humans.txt又变成了之前的样子了(因为我们已经把它给暂存起来了)
git status //干净的
git stash list 查看暂存的内容
git stash show -p(表示用补丁的方式查看) stash@{0}
git stash apply stash@{0} //恢复工作进度
git stash drop stash@{0} //删除这个暂存
git stash pop stash@{0} //在恢复工作进度的时候直接删除工作进度
11.查看提交日志 git log
git log //f向下翻页 b向上翻页 q退出
git log --oneline
git log --oneline -5
git log --oneline --author='huhao'
git log --oneline --grep = 'index.html' //显示包含index.html的提交
git log --oneline --before='2014-07-05' //2014年7月5日和之前的提交
git log --oneline --before='3 days' //三天前的提交
git log --oneline --before='3 weeks' //三周前的提交
git log --oneline --graph //带图形的
git log有很多选项,可以使用 git help log 去查看详情的使用手册
三、分支
git branch mobile-feature //创建移动分支
git checkout mobile-feature
git branch //查看所有分支
git log --oneline --decorate //加一些装饰,能显示在哪个分支上提交的 --decorate
git log --oneline --decorate --all//显示所有的
git checkout master 回到master分支,发现刚才在feature上做的修改都消失了,
git log --oneline --decorate //发现虽然是有装饰的,但是看不到在feature分支上提交的内容
git log --oneline --decorate --all //可以查看到包含feature的所有提交
3.对比分支区别
git diff master..mobile-feature
a代表两个点左边的分支 b代表右边的分支
f向下翻页,q退出
git diff master..mobile-feature index.html //只对比index.html文件的区别
4.合并分支 fast-forward
git branch //发现当前是在master分支上
git merge mobile-feature
//发现上面写着fast-forward 因为我们在创建mobile-feature以后 还没有对master做新的提交,所以就是fast-forward
git diff master..mobile-feature
5.合并分支(非fast-forward)
git checkout mobile-feature
添加修改
git commit -am '为Index.html添加一些内容' //-a(意思就是add)加m(给一个message)这样就不用先add了,
然后在master上也做一些修改,然后查看一下,
//这个时候提交修改就不能fast-forward了
git branch //发现当前在master分支上
git merge mobile-feature
然后出现了一个描述,可以自己修改描述信息
:wq
然后查看一下
6.解决合并冲突
如果feature和master中修改了同一个文件,merge时就会产生冲突
解决的办法是把<<<和===之间的内容(包含这两个)都给删掉,还有>>> master 也要删掉
然后再git add. 然后 git commit ,这时候可以不写message,git会自动提供一个描述
7.重命名分支
git branch bugfix //创建了一个新分支
git branch
git branch -m bugfix bugfix-1 //重命名分支 -m代表move
git branch
git branch -d 删除分支
四、远程
1.远程 remote
2.github创建添加版本库
git remote add origin xxxx.git(默认我们给他起名叫origin)
git remote -v (v表示verbose 即:详细信息)
git remote rm xxx(远程名)
3.推送分支
git push -u origin master (u 代表set upstream
git branch -a 查看本地分支
git branch -r 查看远程分支
git push origin mobile-featulre( 没有加 -u 就不会跟踪upstream了)
4.其他人使用远程版本仓库 pull request
李四点击 pull requst 然后 new pull request
主人 merge pull request
5.克隆
git clone xxxx.git new_foloder(克隆到new_floder文件夹里)
6.提取
张三在本地git clone,
主人修改了代码,并且进行了提交
张三 git status 仍然提示 up to date with origin/master
想知道主人有没有更新, 输入 git fetch
然后再git status 就会发现是有更新了
然后可以 git merge origin/master
7.Fork
fork完了可以修改,然后 pull request!
8.协同开发人员
github中的 Collaborators 然后 Add collaborator
五、图形工具
1.OS X中的github图形软件
2.brackets中的git扩展
3.介绍一下打标签:
git tag v0.1
git tag //会发现v0.1这个标签
git show v0.1 //看一下详细信息
git tag -a(意思是annotate注释) v0.2 -m 'hola'
git show v0.2
git checkout v0.2
git tag -a v0.0 573c312ea -m 'init' //让tag指向某个特定的提交
git tag -d v0.0 //删除标签
git push origin v0.2 //推送远程
git push --tags //把本地所有标签推送给远程