Git的学习与常用操作

·Git的工作原理关系图:


一个文件从修改到提交的过程:

修改 ---〉工作区中进行,此时工作区的状态比暂存区,版本库区要新

添加 ---〉修改的文件被添到暂存区,工作区与暂存区的文件状态一样,都要比版本库区的状态要新

提交 ---〉暂存区中的文件被写入版本库区,此时工作区,暂存区,工作区中的文件状态时一样的

注意:工作区,暂存区都是临时存放点,不安全

版本库区是安全存放点,所有文件的版本都是控制在版本库区中的

说明:从远程git服务器克隆到本地的git库,有一个隐藏的.git目录,这个目录就是暂存区及库区的位置,千万不要删除了,除了.git目录之外的区域都是工作区。


·使用Git命令上传下载代码

1、gitconfig 配置

配置gerrit账号及邮箱

gitconfig --global user.name gerrit_account

gitconfig --global user.email 与账号绑定的邮箱

由于这里是全局配置,只需要在本地配置一次就ok了


2、gitclone 下载代码

$cd working-tree

$gitclone ssh://gerrit_account@[代码服务器ip]:29148/projectname

注意:projectname 项目库的名称

            gerrit_account 用个人的gerrit账号替换

            IP:用gerrit/git的iP替换


3、从gerrit服务器拷贝钩子脚本到本地库

$scp –P 29418 -p gerrit_account@[代码服务器ip]:/hooks/commit-msgworking-tree/projectname/.git/hooks/

这个经常是在push代码失败的时候出现要求下载的,执行该命名之后,回退push操作,再次push就能成功。


4、本地修改提交及推送到gerrit web页面

 1) 确定修改哪个分支的代码,建立本地分支用于追踪远程分支

$ cd working-tree/projectname

$git branch –r

 

然后确定修改哪个分支的内容,比如修改主线master的代码,

就要在本地建立master分支,用于追踪远程版本库的分支。

$ git checkoutmaster (建立本地master分支,追踪远程版本库的master分支,并且切换到本地master分支)


2)修改文件内容,或者新增文件

$gitstatus (查看状态,会有提示下一步应该怎么做)

$git add 文件名称

$gitstatus

$gitcommit –m “CR编号 内容简单描述”


3)如果是删除或者重命名已受控文件或目录,即

$gitrm 文件/目录 或者 $git mv 文件1/目录1  文件2/目录2

$gitstatus (查看状态,发现文件已从工作区及暂存区删除,或者重命名后的文件已在工作区级暂存区,下一步只需提交即可)

$gitcommit –m “CR编号 内容简单描述”


4)推送本地分支的修改到gerrit服务器页面

git push origin branchname:refs/for/branchname

brachname 就是当前代码库当前本地分支,可以通过git branch 命令查看


5)代码提交者登录到gerrit页面,在走查单中添加走查人员名单


·git回退操作

1:在本地项目库中,在工作区修改或删除已受控的文件,后悔了,想要会退到之前的状态(工作区的文件回到修改之前的状态,暂存区,库区不受影响)

git  checkout  --  filename 回退某个文件

git checkout  --    .    回退当前目录所有修改

2:在本地项目库中,修改或添加或删除了某个文件之后,执行了git add的动作之后,后悔了,想取消add的动作(工作区不受影响,库区不变,暂存区回到add之前的状态)

git reset HEAD  filename

git reset HEAD .

3:在本地项目库中,修改或添加或删除了某个文件之后,执行git  add ,git commit的动作之后,想取消git commit的动作,想重新commit一次(工作区,暂存区不变,库区回到commit之前的状态)

git  reset --soft  HEAD^

4:在本地项目库中,修改或添加或删除了某个文件之后,执行git  add ,git commit的动作之后,想取消add及commit的动作,但是保留工作区的修改:(暂存区,库区回到之前的状态)

git  reset  --mixed HEAD^

5:在本地项目库中,修改或添加或删除了某个文件之后,执行git  add ,git commit的动作之后,想取消add及commit的动作,并且抛弃工作区的修改:

git  reset  --hard HEAD^

·说明:如果发现第五类的回退操作有误,想回到之前的状态

·# git relog

·# 2522695 HEAD@{0}: reset: moving toHEAD^

·# git reset   --hard HEAD@{0}

6: 在本地项目库中,修改或添加或删除了某个文件之后,执行git  add ,git commit的动作之后,并且已经推送到远程库,如果回退远程库的此次合入呢?

在本地库通过git log找到此次提交的commit-ID(40位哈希值)

git  revert -n  commit-ID

git  commit –m “xxxxx”

git  push origin branchname:refs/for/branchname


·git冲突解决

(1)执行git fetch origin

git rebase origin/master(请用实际的分支名称替换master)

我们看到了冲突文件......
确认冲突存在后,执行git mergetool即可启动GUI进行代码的融合:中间三个区域分别对应着LOCAL BASE REMOTE三个版本(其中,BASE为共同的基版本,LOCAL为在你合入之前已经合入的版本,REMOTE为我们合入时提示冲突的版本),最下面的区域即为解决冲突后的最终版本,保存退出。

解决好冲突文件后,将.orig文件进行删除,执行git rebase --continue命令,注意:此处mergetool已经自动为我们执行了git add 命令,无需再执行该命令。

最后进行推送,在原来的走出单中会多出一个patch包,如下所示,再次审核,通过后直接合入。


(2)针对冲突文件比较少的情况

  在本地库的操作方法:假设本地库的本地分支是master分支,如果是其它分支,下面的master就要用对应的分支名称替换

cd  test

 git fetch origin

 git rebase origin/master


·git status介绍

通过git status命令可以快速定位本地git库的状态,git status命令输出的打印信息可以指引你下一步该如何操作。


·git diff的使用

diff 不停的比对工作区、暂存区、版本库区的变化

git   diff   比对工作区与暂存区的变化

git   diff  - -cached  比对暂存区与库区的变化

git   diff    HEAD   比对库区与工作区的变化


·git log介绍

'git log'是git中最常用的一个命令,执行之后,会显示该项目的提交历史。如果命令不加任何参数,那么就会显示目前所在分枝上,从最后一次提交开始,按时间顺序依次向前排列的所有提交历史记录。

git日志默认输出的提交历史的内容格式:

*提交的校验和
*作者信息(作者名和email地址)
*提交日期
*提交信息

多数情况下,这样输出还是比较完美的。然而,有时候你只是想看到某个分枝上的最后几条提交信息,或者某些感兴趣的数据,只要在'git log'命令后面加上相应的参数,它就可以做更多有意义的事情。


·gittag介绍

如何打标签:

1、在这里只介绍常用的打标签的方法:

git tag -m “标签日志” tagnamecommit-Id

具体操作:

 $cd working-tree/projectname

$git branch

*master

对master分支打标签

$git log

 查找版本号commit-Id

$gittag –m “标签日志”  tagname commit-Id

$gitpush --tags #推送本地标签到远程,通常需要管理员在gerrit的项目库配置推送权限才可以

2、如何查看标签

$gittag –l

列出所有的表情名称

$gitshow tagname

显示标签的详细信息

$gitcheckout tagname

获取标签的代码

3、如何删除标签

$gittag –d tagname

 删除本地库的标签

$gitpush origin  :tagname

 删除远程库对应的标签
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值