git的使用和学习

git的学习和使用

  今天遇到一个郁闷的问题,场景是这样的,我一直在分支issue-11上做task,然后带我的师傅说现在有个issue-12issue-12 merge了我和另一个人的code,之后我对task的修改在issue-12上进行即可。然后问题就来了,我使用命令git checkout -b issue-12,然后我就执行git pull origin issue-12来拉取code,之后提示我解决冲突,它说有些地方被both modified,需要执行commit,我就各种commit,然后搞不好,我又切出去删掉issue-12,然后又创建git checkout -b issue-12,这样搞了几次,我都晕了,对于不会解决冲突,伤不起!

  带我的那个人跟我说,对于这种情况避免出现的方法就是:从最干净的主分支master去修建一个分支,然后拉取code,这样就不会出现,如果冲突出现,每次执行commit,git上都会有记录。

  接下来我会简单介绍git的使用,也算是给自己做个笔记。

git的简介

  • Git 和其他版本控制系统的主要差别在于,Git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异。
  • 在 Git 中的绝大多数操作都只需要访问本地文件和资源,不用连网。但如果用 CVCS 的话,差不多所有操作都需要连接网络。因为 Git 在本地磁盘上就保存着所有有关当前项目的历史更新,所以处理起来速度飞快。用 Git,可以在无网路状态下,在任何地方都可以非常愉快地频繁提交更新,等到了有网络的时候再上传到远程的镜像仓库。
  • 在保存到 Git 之前,所有数据都要进行内容的校验和(checksum)计算,并将此结果作为数据的唯一标识和索引。Git 使用 SHA-1 算法计算数据的校验和,通过对文件的内容或目录的结构计算出一个 SHA-1 哈希值,作为指纹字符串。Git 的工作完全依赖于这类指纹字串,所以你会经常看到这样的哈希值。实际上,所有保存在 Git 数据库中的东西都是用此哈希值来作索引的,而不是靠文件名。
  • 常用的 Git 操作大多仅仅是把数据添加到数据库。
  • 对于任何一个文件,在 Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。已提交表示该文件已经被安全地保存在本地数据库中了;已修改表示修改了某个文件,但还没有提交保存;已暂存表示把已修改的文件放在下次提交时要保存的清单中。由此我们看到 Git 管理项目时,文件流转的三个工作区域:Git 的本地数据目录,工作目录以及暂存区域。每个项目都有一个 git 目录,它是 Git 用来保存元数据和对象数据库的地方。

git的安装

  主要有两种,一种是通过编译源代码来安装;另一种是使用为特定平台预编译好的安装包。

  ubuntu下git的安装:命令行中输入 sudo apt-get install git 回车即可

git的配置

  初次使用需要配置用户信息 

$ git config --global user.name "Evan zhang"
$ git config --global user.email evanzhang@example.com

  使用git config --list命令,查看已有的配置信息

$ git config --list
user.email=evan.zhang@augmentum.com.cn
user.name=evanzhang
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.url=**
remote.origin.fetch=**
branch.master.remote=**
branch.master.merge=**
git的基本操作  

  克隆一份远程的code,到你的本地仓库:

$ git clone git://github.com/schacon/grit.git
   确定哪些文件当前处于什么状态:
$ git status
 
 
  添加修改的文件到暂存区: 
$ git add filename(eg.hello.java)

  回退到修改的状态(当你add之后,发现还有需要改的,使用这个命令):

$ git reset HEAD filename(eg.hello.java)
   提交到git目录(我一直认为是提交到本地仓库):
$ git commit -m "description info(描述信息)"

  如果对提交的描述信息不满意,想要再次更改描述信息(单纯的只是修改描述信息):

 $ git commit --amend  "description info"

  在提交到远程的服务器的时候,你需要先拉取一下代码(若有冲突,需要先解决冲突):

$ git pull [remote-name] [bench-name](eg.master)
        之后就可以将你的修改推送到远程服务器,将本地仓库中的数据推送到远程仓库:
$ git push [remote-name] [bench-name](eg.master)
   如果远程服务器的路径变了,可使用下面这个命令设置:
$ git remote set-url [remote-name] git://github.com/schacon/grit.git

git分支的基本命令

   Git 中的分支,其实本质上仅仅是个指向 commit 对象的可变指针。Git 会使用 master 作为分支的默认名字。在若干次提交后,你其实已经有了一个指向最后一次提交对象的 master 分支,它在每次提交的时候都会自动向前移动。
  创建分支:

$ git branch [branch-name]
   切换到创建的分支:
$ git checkout [branch-name]
   新建并切换到该分支,使用一条命令来执行(这样的操作会将上一个分支的状态一并带过来):
$ git checkout -b [bench-name]
  查看当前的分支:
$ git branch 

  切换到master分支,同时合并自己创建的分支到master,也就是合并指定分支到当前分支:

$ git checkout master 
$ git merge [bench-name] 

  删除一个分支:
$ git branch -d [bench-name]

  当git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成(对于冲突解决的原理,可以看看资料分享里面讲到的操作)

git的资料分享

  廖雪峰的官方网站(对git的讲解图文并茂): http://www.liaoxuefeng.com/

  推荐一本书籍: pro git


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值