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。