何为Git
2002年开始,Linus Torvalds开始使用Bitkeeper作为Linux内核主要的版本控制系统来维护源码,但Bitkeeper是一个专有软件,虽然所在公司给了Linus Torvalds特殊的授权,但在Linux社区中,一直饱受争议,他们认为应该使用开源的系统来管理Linux源码,后来他们也和Bitkeeper所属公司发生了一些不愉快,Linus决定自己开发一个版本控制系统,于是,Git的第一个版本在十天之后就出生了。Git这个名字在俚语里是愚蠢的意思,但事实上,Git已经成为了当今最聪明的版本控制系统。
Git之命令
git init //初始化项目文件夹为本地工作区
首先进入项目目录的主目录中,执行该命令,Git会将该目录设置为项目在该机器上的本地仓库,以便实现项目的本地管理。
git add 文件名(*)//添加文件到暂存区域中,可以一次添加多个(所有文件)
git commit -am “文件说明”//添加并提交工作区中文件并附上说明
这两个命令一般一起使用,在对已经修改好的文件首先add到暂存区域中,然后提交到本地仓库中。
git reset (--mixed(默认))/(--soft)/(--hard) [HEAD(~+数字(回滚到上面第几个))] /[版本快照]
//(移动HEAD指向上一个快照并回滚到工作区域)/(只移动HEAD到上一个快照(相当于撤销上次的commit))/(默认的选项+将暂存区域还原到工作区域)
git reset (快照ID)文件名 //只恢复到暂存区域
有提交就有回滚操作,而在回滚操作中,工作区,暂存区,和分支中可能存在相同文件名的文件,只是在内容上有所区分,这三个文件是可以独立操作的。
git diff //比较工作目录和暂存区域
git diff HEAD/快照ID //比较当前工作目录和HEAD指向的的快照(快照ID)
git diff --cached(快照) //比较暂存区域和HEAD指向的快照(指定快照)
git diff (快照1) (快照2) //比较仓库中两个快照
因为可能会存在同一文件名的文件出现在三个不同的地方,git diff就是查看他们之间的区别。
git rm (-f(--cached)) 文件名 // 删除工作区和暂存区文件(暴力删除(删除暂存区,保留工作区))
git mv 原文件名 新文件名 //修改文件名(修改的只是工作区域和暂存区的,并未修改仓库中)
对工作区和暂存区中的文件进行管理。
git checkout (--(确保分支中没有要恢复文件同名)) (文件名) //将仓库(暂存区域)中的文件覆盖工作区域和暂存区的文件(慎重使用)
git checkout (-b)分支名 //(创建)切换分支([会比reset --hard更加安全,在切换之前会检查当分支工作是否完成];[reset --hard 会将本身以及指向的分支都回滚到过去(相当于删除以前的快照),而checkout只是切换HEAD指针])
主要是对三个不同地方的文件进行操作,有些操作可能存在风险性。
git branch (-d/-D) 分支名 //创建分支(删除/强制删除) (一般项目有master(主分支)和develop(开发分支)两个分支,还会存在feature(功能分支),release(内部发行版),hotfix(维护),用完之后及时删除)
git merge (--no-ff) 分支名 //(保留以前信息,强制使用三方合并)合并分支,当合并失败时,先解决冲突并提交,而后会自动合并;
git checkout (HEAD~/快照ID) //切换到指定的匿名分支
Fast-forward和Three-way merge(三方合并) 两种合并方式;Fast-forward通过改变指针合并;Three-way merge通过找到共有的祖先进行比对进行合并(同一文件可以包含不同内容,但同一行必须相同,否则视为冲突)
在主分支上创建其他分支,能够更好的对项目进行维护可管理。
git config --list //查看当前仓库配置
git clone 项目地址 //下载远程仓库项目到本地仓库
git push //将本地仓库同步到远程仓库
一些常用的操作。
当参与到别人的开源项目时,想要将自己修改的部分和原始项目合并,需要向项目提交pull request操作,只有当项目管理员同意后,才能merge操作。