Git
一些命令
config的三个作用域 local(default,只对某个仓库有效) global system
git config –list//查看现有配置信息
add到的是git暂存区的作用,commit前的一个区域,比如可以用于暂存工作状态,然后再做修改,比较两次的修改,满意了第二次覆盖,不满意将第一次的提交。暂存区中不合适也可以回退。
因为需要查看暂存区的状态,使用的命令是:
git status
git重命名命令
git mv src dest
git log
git log (–oneline一行显示) (–all所有分支) (-n4最近四个) (–graph绘制图形)
.git目录
HEAD存储指向当前工作的分支
config中记录user的信息,如果设置local配置,则会在此存储local信息。
refs引用存储heads(分支) tags(标签信息)
objects存储对象
commit,tree和blob对象之间的关系。
分离头指针(detached HEAD)指的是HEAD指向一个commit而不是一个分支,很可能会被git当作垃圾清理掉。
HEAD与branch
HEAD不仅可以指向分支,最终是落脚于某个commit,还可以指向之前一次commit。所以HEAD指向commit。HEAD可以用于指代所指commit。
常用场景(在本地维护自己的分支)
清除不要分支
git branch -D 分支名
最新commit描述不准确,进行修改
git commit –amend//双单杠
老旧commit描述不准确,进行修改
git rebase -i 被修改的父类的id
进入交互式界面用于指定对commit要进行的操作
r
wq!保存并退出进入交互式界面,来修改message信息。
wq!保存并退出
历史多个连续commit合并
和上面一样的操作选择父节点,不过是r变s。
历史不连续commit合并
选择父节点,然后将要和并的不在父节点下的commit显式pick id号,将父节点下要合并的子节点挨着放,s开头。
比较暂存区与HEAD所含文件
git diff –cached
比较工作区和暂存区
git diff
将暂存区恢复成和HEAD一样
git reset HEAD
将工作区文件恢复成暂存区一样(add后又做了变更,然后不满意时)
git checkout – 文件名
取消暂存区部分文件变更
git reset HEAD –文件名
消除最近几次提交
git reset –hard commit_id
这样HEAD和暂存区都指向了commit_id所指的commit
比较不同提交的差异
git diff commit_id1 commit_id2
正确的删除一个文件
git rm 文件名
当开发时临时加了紧急任务时,将自己现在做的修改压入堆栈。
git stash
取回使用apply,取栈顶信息,不出栈。
git stash apply
取回使用pop,栈顶出栈
git stash pop
.gitignore用于指定不需要Git管理的文件,将文件名加在其中或者使用通配符来指定不需要git管理的文件。
git传输的协议分为哑协议和智能协议。在本地也存在git备份,类比于远端库有一个本地库。
Github常用操作
配置公私钥 ssh 本地生产公私钥,将公钥粘贴到github中。
git pull是分两步走,先是fetch然后是merge。
当远端有文件,本地没有,这时fetch不是fast-forward方式,要通过merge合并。
也可以用rebase方式。
不同人修改不同文件如何处理
远端新建分支,本地建分支与远端相关联
git chechout -b(切换到新建分支) 本地分支命名 远端分支命名
查看分支情况,本地以及远端
git branch -av
修改相同文件不同区域,同理,可以不用人介入的merge。
当多人修改同一区域的时候,pull(fetch and merge)会失败,自动merge会失败。文件中会显式标出冲突的地方。
此时有两个选择,一,终止merge git merge –abort
二,解决冲突的地方,然后commit 然后push到远端
同时变更了文件名和文件内容,git可以正常的合并。
禁止向集成分支执行push -f操作。
高效搜索github项目。in:readme stars:>1000 advanced search
开源项目
保证代码质量 fork下来,pull request
organization
项目分支情况 insights->network
merge rebase合并分支
分支和master产生冲突时,master会合并到分支解决冲突,解决完然后再提交pull request,又回到master产生一个commit。