一.一些包
git-gui: Git的一种基于Tcl/TK的图形用户界面;gitk: 是另一种用于Tcl/T编写的但更侧重于项目历史可视化的Git浏览器;gitweb: 用于在浏览器里显示Git版本库git-email: 通过电子邮件发送Git补丁git-daemon-run: 接受匿名下载请求的方式来共享你的版本库
sudo apt-get install 包名
二.一般工作流程
1、git clone 克隆远程资源到本地目录,作为工作目录;
2、然后在本地的克隆目录上添加或修改文件;
3、如果远程修改了,需要同步远程的内容,直接git pull就可以更新本地的文件;
4、本地在修改之后,可以通过git status 查看修改的文件。然后使用git add 添加修改的文件暂到缓冲区;
5、在添加之后,可以使用git commit添加到当前的工作区;
6、在修改完成后,如果发现错误,可以撤回提交并再次修改并提交;
7、git push将本地的修改推送到远程的git服务器。
三.分支操作
feature分支开始于develop分支,完成以后合并到develop分支。
当完成一定数量feature分支以后,从develop再开一个release分支出来,这些特性将被更行到下一个发布的版本中,之后的feature将不会被合并到release中。之后在release分支中,只修改bug,然后完成release分支。
完成release分支会完成以下三个操作:
1、合并release分支到master;
2、给master打上版本的标签;
3、release回归到develop分支。
当发现master上有bug时,开一个hotfix,完成后合并到master分支。
1、创建本地分支:
git branch 分支名字
2、切换到新的分支工作:
git checkout 分支名字
**这时候修改的文件都是在dev分支,不会对master分支的文件进行修改。
3、切换分支
git checkout master 切换到master分支
git merge dev 切换后把dev分支的代码合并到master分支上
4.删除分支
git branch -d dev 删除分支
如果有冲突会有提示,默认是添加两个分支文件里面的内容,然后Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,修改冲突的文件,然后git add修改后的内容就可以继续提交了。
三.起步
1)查看子命令
git //系统会自动提示后缀命令
2)建立Git版本库的技术
--创建初始版本库--
将任何目录,网站等转化为版本库:
git init //Git将所有修订版信息放在顶层的隐藏文件.git目录内
--将文件添加到版本库(添加后到暂存区)--
git add 文件名.后缀 //目前处于暂存状态
--查看中间状态的上传文件--
git status
*一条完全限定的git commit命令必须提供日志消息和作者(该操作不会对status产生影响)
git commit -m "Initial contents of public_html" --author="Jon Loeiger"
*配置提交作者(该操作不会对status产生影响)
git config user.name "Jon Loeiger"
git config user.email "jdl@example.com"
--更改后再次提交(commit后到本地分支)--
git commit 文件名.后缀名
--推送到远程--
git push -u origin master
--从远端仓库提取数据并尝试合并到当前分支--
git pull
--获取远程tag--
git fetch origin tag
--查看历史--
git log
--查看更详细信息--
git show 版本号 //git log会打印出commit的版本号
--显示版本库对象的内容、类型及大小信息--
git cat-file -t(显示对象类型)/-s(显示对象大小)/-e(对象存在且有效,命令结束状态返回值为 0)/-p(根据对象类型显示内容) 散列值
--提供当前开发方式分支的摘要--
git show-branch --more==10 //10表示额外10个版本
--查看版本差异和变更--
git diff 版本号1 版本号2
git diff --cached 显示已经暂存并且因此要有助于下次提交变更
--版本库内文件的删除和重命名--
删除:git rm 文件名.后缀名
注释提交 git commit -m "注释内容"(删除后这步一定要做)
--重命名--
git mv 原文件名 新文件名
3)创建版本库副本
git clone [地址] [本地目录]
4)关于回滚
1、在工作区的代码
git checkout filename.后缀 # 丢弃某个文件,或者
git checkout . # 丢弃全部
**git checkout . 表示丢弃全部,也包括:新增的文件会被删除、删除的文件会恢复回来、修改的文件会回去。这几个前提都说的是,回到暂存区之前的样子。对之前保存在暂存区里的代码不会有任何影响。对commit提交到本地分支的代码就更没影响了。当然,如果你之前压根都没有暂存或commit,那就是回到你上次pull下来的样子了。
2、代码git add到缓存区,并未commit提交
git reset HEAD . 或者
git reset HEAD filename.后缀
**这个命令仅改变暂存区,并不改变工作区,这意味着在无任何其他操作的情况下,工作区中的实际文件同该命令运行之前无任何变化
3、git commit到本地分支、但没有git push到远程
git log # 得到你需要回退一次提交的commit id
git reset --hard # 回到其中你想要的某个版
或者
git reset --hard HEAD^ # 回到最新的一次提交
或者
git reset HEAD^ # 此时代码保留,回到 git add 之前
4、git push把修改提交到远程仓库
1)通过git reset是直接删除指定的commit
git log # 得到你需要回退一次提交的commit id
git reset --hard
git push origin HEAD --force # 强制提交一次,之前错误的提交就从远程仓库删除
2)通过git revert是用一次新的commit来回滚之前的commit
git log # 得到你需要回退一次提交的commit id
git revert # 撤销指定的版本,撤销也会作为一次提交进行保存
3) git revert 和 git reset的区别
- git revert是用一次新的commit来回滚之前的commit,此次提交之前的commit都会被保留;
- git reset是回到某次提交,提交及之前的commit都会被保留,但是此commit id之后的修改都会被删除
5)捕获状态树
git write-tree
四.四种对象类型
1.块(blob/binary large object,二进制文件大对象):文件的每一个版本.
2.目录树(tree):记录标识符,路径名和在一个目录里所有文件的一些元数据;也可以递归引用其他目录树或子树对象,从而建立一个包含文件和子目录的完整层次结构.
3.提交(commit):每一个提交对象指向一个目录树对象,这个目录树对象在一张完整的快照中捕获提交时版本库的状态
*在 Git 的版本管理中,每一次提交Git会先计算每一个子目录的校验和,然后在 Git 仓库中这些校验和保存为树对象,随后创建一个提交对象(commit object),该提交对象会包含一个指向暂存内容快照的指针, 而每一次提交产生的提交对象都有一个父对象,即本次提交的上次提交。
4.标签(tag):一个标签分配一个任意的且人类可读的名字给一个特定的对象,通常是一个提交对象。
五.三种文件类型
网友评论