JS闯关之路iOS学习Java服务器端编程

git/github操作手册

2017-07-07  本文已影响77人  icessun
工作流图

认识Git

直接记录快照,而非差异比较

关心文件数据的整体是否发生变化,而非文件内容的具体差异;每一次提交更新,会对所有的文件作一快照,保存一个指向快照的索引,要是文件没有变化,不会再次保存,只是对上次保存的快照作一链接。也就是说每一个版本都独立保存。

更新的文件快照

几乎都是在本地操作

Git在本地磁盘上就保存着所有当前项目的历史更新,所有保存在 Git 数据库中的东西都是用哈希值(SHA-1 校验和)来作索引的,而不是靠文件名。

Git安装

Git 配置

配置这步很关键,主要是为了以后上传代码到服务器上面的一个身份认证。确认之后不能更改。

//在cmd命令行里面输入下面两句,进行配置,不能有中文
       $ git config --global user.name "Your Name"
       $ git config --global user.email "email@example.com"     
// 查看git配置信息,可以查看到刚才注册的邮箱和用户名
        $ git config --list
// 配置差异分析工具
    $ git config --global merge.tool vimdiff
// 获取帮助
     $ git help <verb>
配置Git

git的三种状态

git是维护这三种状态来实现版本控制的。

git三种状态

实战操作


红色表示:在工作区修改了但是没有提交到暂存区。绿色表示:在暂存区但是没有提交到git版本库中。

如果看不到.git 文件夹,那么需要把电脑设置的隐藏文件夹的选项勾选去掉。

文件夹----> 选择组织选项----->文件夹和搜索选项---->查看(win8以上直接从这步开始)---->隐藏文件和文件夹设置状态为显示
. git文件夹内容
里面的HEAD文件保存着版本的索引,且HEAD指针指向的是最新版本,版本的切换和回滚就是靠它。.git文件夹里面保存的都是git跟踪项目迭代需要的数据。文件夹里面的内容不要去修改,都是自动生成的。

可以使用命令 git status来查看当前工作区域文件的状态,时刻了解当前仓库的状态:

文件状态查看
上图说明,当前工作区域没有文件需要进行提交(1),可以使用命令git rm --cached <file>把文件从跟踪清单stage里面删除(2),下面的青色字,表示有一个新文件被加到暂存区了(3)。

这个时候,我们再次查看工作区域的文件状态:该工作树是干净的,不需要提交。

工作区域的文件状态
到目前为止,实现了一个文件被git管理,并且提交到git仓库的过程,总结:一个项目修改到提交,两步骤:

合并一步:

反悔操作


什么时候会出现修改撤销呢?我们在工作区修改文件错误;或者已经add提交了,把错误也提交了暂存区;再或者commit把错误提交到了版本库中

在工作区反悔,没有add之前

add之后,commit之前

commit之后,提交到了版本库,没有推送到远程

文件保存在仓库

$ git add <file>  // 把文件添加到仓库 暂存区
$ git commit -m '描述'  // 文件提交到仓库 保存一个版本的快照 保存在版本历史记录里面

$ git commit -a -m '描述' // 直接跳过暂存区,把所有已经跟踪过的文件暂存起来一起提交

// 漏掉的文件没有加入,或者提交的消息写错了 修改最后一次提交 如果刚才提交完没有作任何改动,直接运行此命令的话,相当于有机会重新编辑提交说明,但将要提交的文件快照和之前的一样。
$ git commit --amend 


$ git rm 要删除的文件 // 该文件就不会纳入版本管理,要是这个删除文件,已经修改并且放到了暂存区的话,就必须强制删除 -f

$ git rm --cached 不跟踪的文件 // 把文件从跟踪清单里面删除

// 重新命名文件
$ git mv file_from  file_to

版本回退

  $ git log // 从最近的到最远的版本记录
   
  $ git log -p -2 // -p 展示每次提交的内容差异 -2 最近两条 
  
  $ git log --pretty=oneline  --graph // 输出的信息更简短   --graph  多出一些 ASCII 字符串表示的简单图形,形象地展示了每个提交所在的分支及其分化衍合情况。
$ git reset --hard HEAD^

远程仓库github

  $ git push origin master / 远程仓库的名字  分支的名字
  $ git remote show 远程仓库的名字 // 查看远程仓库的信息
  $ git remote rename 原远程仓库的名字  现在仓库的名字 // 修改某个远程仓库在本地的简称
  $ git remote rm 远程仓库的名字  // 碰到远端仓库服务器迁移,或者原来的克隆镜像不再使用,又或者某个参与者不再贡献代码,那么需要移除对应的远端仓库,
  $ git remote // 查看配置了那些远程仓库

  $ git remote -v // 显示对应的克隆地址  

  // 如果是克隆了一个仓库,此命令会自动将远程仓库归于 origin 名下。 
  $ git fetch origin  // 会抓取从你上次克隆以来别人上传到此远程仓库中的所有更新(或是上次 fetch 以来别人提交的更新)

  $ git fetch 远程仓库名 // 拉取本地仓库没有的信息 从远程仓库抓取数据到本地 并不自动合并到当前工作分支
  

git clone 命令本质上就是自动创建了本地的 master分支用于跟踪远程仓库中的 master 分支;运行 git pull,目的都是要从原始克隆的远端仓库中抓取数据后,合并到工作目录中的当前分支。

分支管理

使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作;切换分支之前要保存当前分支的工作区是干净的,把修改提交,否则不让你切换分支

// 上面两个命令合并成为一条
 $ git checkout -b 分支的名字

 $ git branch -v // 查看各个分支最后一个提交对象的信息
 
 $ git branch --merged // 查看哪些分支已被并入当前分支,也就是说哪些分支是当前分支的直接上游。

  $ git branch --no-merged // 查看尚未合并的工作
创建分支testing

HEAD指向当前工作的分支,也可以说是当前分支的别名,HEAD会随着当前工作分支的变化而变化,每提交一次,HEAD向前走动一次

切换到新建的分支上面

在当前新建的分支上面提交后,会向前移动了一格,而master分支仍然指向原先 git checkout时所在的 commit 对象。

在新建的分支上面提交 切换到主分支上面

在当前分支上面再次提交,项目提交历史产生了分叉;因为刚才我们创建了一个分支,转换到其中进行了一些工作,然后又回到原来的主分支进行了另外一些工作。这些改变分别孤立在不同的分支里:我们可以在不同分支里反复切换,并在时机成熟时把它们合并到一起。

项目提交历史出现分叉

由于当前 master 分支所指向的提交对象(C4)并不是 iss53分支的直接祖先,Git 不得不进行一些额外处理。就此例而言,Git 会用两个分支的末端(C4 和 C5)以及它们的共同祖先(C2)进行一次简单的三方合并计算。用红框标出了Git用于合并的三个提交对象:

分支的合并 合并后

合并出现冲突

 <<<<<<< HEAD
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
  please contact us at support@github.com
</div>
>>>>>>> iss53

可以看到=======隔开的上半部分,是 HEAD(即 master分支,在运行merge 命令时所切换到的分支)中的内容,下半部分是在 iss53分支中的内容。

多人协作

小窍门

在 Windows 上安装了msysGit,默认使用的Git Bash就已经配好了这个自动补全脚本,可以直接使用。

在输入Git命令的时候可以敲两次跳格键(Tab),就会看到列出所有匹配的可用命令建议:

$ git co<tab><tab>
commit   config

$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status
$ git config --global alias.last 'log -1 HEAD' // 要看最后一次的提交信息 git last

现在,如果要输入 git commit只需键入 git ci 即可

参考资料廖雪峰网站git教程
git pro

上一篇下一篇

猜你喜欢

热点阅读