#Ubuntu_16.04#__代码管理工具Git的使用

一、安装Git并设置

一)安装

sudo apt-get install git

二)设置Github关联

详见参看链接1
在github中添加ssh key详见上述链接,如果在gitlab中添加ssh key,具体页面如下所示:
在这里插入图片描述

二、常用命令

一)查看帮助

git 命令 --help
#例如
git push --help

二)查看分支状态

git log #查看当前分支的历史版本和更新记录
git reflog #查看仓库中历史版本的修改记录,是git log的简洁信息显示

git log结果
git reflog结果

三、使用Git管理项目

cd project_folder  #进入工程所在文件夹
git init  #创建git仓库,会生成一个.git隐藏文件夹
git add -A  #将工程所有文件夹添加到git仓库,“-A”表示添加所有文件到仓库,可以直接输入指定文件(需要指定明确的路径),即表示添加制定文件到仓库
git status #查看当前分支下所有文件的状态
git commit -m “description of the added version”  #添加软件版本的描述信息
git push origin master #将本地master分支下的内容更新到远程github或gitlab上,如果只是本地的工程,则可以进行这一步

四、分支操作

一)查看当前所有分支

终端中显示的绿色并有指向标指示即为当前所在分支

git branch

二)创新一个新的分支

git branch newbranch #创建一个本地分支
git push origin newbranch:newbranch #创建一个远程分支

三)转换到指定分支

git checkout branchname

四)删除分支

#删除分支local_branch
git branh -d local_branch

#删除分支remote_branch 
git push origin --delete remote_branch

#远处分支删除后同步本地的远程分支
git branch -a:查看本地和远程分支(fetch同步下来的)
git remote show origin:显示本地分支和远程分支的追踪情况,如果fetch下来的远程分支在远程已经被删除,那么这个 命令会显示stale,表示没有追踪到远程分支
git remote prune origin:同步远程删除的分支

五)查看文件状态

1)通过 git status 命令查看
2)文件包括三种状态2
Changes to be committed:表示文件处于缓存区,处于staged状态,可以通过git commit命令添加到仓库区(本地仓库)
Changes not staged for commit:显示的是工作区(本地可操作的文件)和仓库区中文件的状态,显示为modified或者unmodified状态,如果是unmodified状态则不会显示
Untracked files:表示该文件仅在工作区,没有保存在仓库区和缓存区3 文件的三种状态
对于文件在这个几个状态之间的切换,可以通过一定的命令进行4

五、本地仓库与远程仓库交互

代码提交到仓库的流程如下所示2,下述示意图描述了代码4个工作区域转移的关系,具体为工作去(Workspace)、暂存区(Stage/Index)、本地仓库区(Repository或Git Directory)、远程仓库区(Remote Directory)
在这里插入图片描述

一)本地仓库代码提交到远程仓库

git push命令用于将本地代码推到远程服务器上5 6

#使用范例:
git push <远程主机名> <本地分支名>:<远程分支名>
#例如:
#从本地的master分支上传到远程仓库的master分支,并合并内容
git push origin master:master 
git push origin master //等效命令
#强制上传本地master分支到远程master分支,覆盖远程仓库的版本
git push --force origin master
git push -f origin master #等效命令
git push origin +master #等效命令
#删除远程仓库的分支
git push origin --delete master
git push origin :master #等效命令,使用空分支覆盖远程分支
#新建远程分支newbranch,并将本地master分支推送到远程newbranch分支
git push origin master:newbranch

二)远程仓库代码载入本地仓库

1、从远程仓库中下拉分支,并在新加一个分支
下述命令实现,在本地新建一个分支local_branch,并将远程分支remote_branch的内容下拉,然后切换到本地分支local_branch。

git checkout -b local_branch  origin/remote_branch #这种方法会自动建立本地分支和远程分支的映射关系
git fetch origin remote_branch:local_branch #这种方法不会自动建立本地分支和远程分支的映射关系

2、从远程仓库中下拉版本,并合并到本地分支
git pull 命令用于从远程获取代码并合并本地的版本。7
git pull 是 git fetch 和 git merge FETCH_HEAD 的简写。

#使用范例:
git pull <远程主机名> <远程分支名>:<本地分支名>
#下拉远程的master分支,并与本地的localbranch合并
git pull origin master:localbranch
git fetch origin master:localbranch + git merge localbranch #等效于这2条命令
#下拉远程的master分支,并与本地当前的分支合并
git pull origin master

相比之下,git fetch会更加安全一些。

六、版本回退与删除

一)查看commit id

  1. 查看完整的commit id
    1.1 获取某次的commit id
    在终端输入:git rev-parse HEAD
    在终端输入:git rev-parse HEAD~2
    其中最后的数字表示倒数第几次的意思
    1.2 获取所有的commit id记录
    在终端输入:git log
    根据返回的内容,通过commit找到对应的commit id
    1.3 查看所有的git操作记录
    在终端输入:git reflog
    根据返回的内容,通过commit找到对应的commit id
  2. 查看缩写的commit id
    在终端输入:git rev-parse --short HEAD
    在终端输入:git rev-parse --short HEAD~2
    其中最后的数字表示倒数第几次的意思

二)回退到上一版本

git reset --hard HEAD^  #回退到上一版本软件

三)回退到指定版本

git reset --hard commit_number #通过git log命令查看需要回退的版本的commit号
git reset --hard ID #通过git reflog命令查看需要回退的版本的ID号,就是版本最前面的ID号
git reset --hard HEAD~number #通过git reflog命令查看需要回退的版本的number号

如果回退之后,又想返回到新的版本,可以通过commit或ID号返回对应的版本。8

四)删除远程仓库中提交记录

删除远程仓库中记录的方法是先在本地回退到指定版本,然后在强行push到远程仓库,覆盖之前的提交记录,所以只能删除最新的1个或几个提交记录,无法删除中间某个记录,通过2条命令实现9

git reset --hard HEAD^ #回退到上一版本
git push --force origin master #强行将本地仓库的版本推到远程仓库

五)修改commit

  1. 分支在本地
    1.1 添加修改到最近一次的commit
    终端输入:git commit --amend
    在弹出的页面中,你会看到对应的需要修改的commit,直接修改commit即可,然后保存退出
    1.2 修改多次之前的commit
    1)在终端输入:git rebase -i HEAD~2
    其中最后的数字表示显示倒数几次的commit,2表示显示倒数第一和第二次的commit
    2)在弹出的页面中,将需要修改的commit前面的pick改为edit,然后保存退出
    3)接下来终端会提示输入相应的命令
    先输入:git commit --amend
    然后与1.1中的操作一样,修改需要修改的commit
    4)再根据提示输入:git rebase --continue
    如果是需要之前多个commit,则在1)中输入对应commit的次数,在2)中将修改的commit前面的pick都改为edit,接下去根据提示进行操作既可以,具体操作与上述3)和4)一致,需要修改几个commit就会进行几次的3)和4)操作
    详细图示教程参见

  2. 分支已经上传到远端
    将远程分支下拉到本地,然后按上述操作进行
    然后使用本地分支强行覆盖远程分支,具体参见本文第七部分

  3. 查看commit
    3,1 git log
    查看对应commit的commit_id
    3,2查看指定版本的commit_id
    获取完整commit id(如:bb4f92a7d4cbafb67d259edea5a1fa2dd6b4cc7a)
    git rev-parse HEAD
    获取short commit id,完整commit_id的前7位(如:bb4f92a)
    git rev-parse --short HEAD

六)合并commit

  1. 仅合并本地分支的commit
    1)git rebase -i start_commit_id end_commit_id
    合并start_commit_id和end_commit_id之间的commit,如果end_commit_id没有输入,默认是当前的commit,其中start_commit_id为待合并的2个commit之前的一个commit_id,如下图所示,如果想要合并“add 2 line” 和 “add 3line” 所对应的2个commit id,则start_commit_id是“add 1 line” 对应的commit id;
    commit id 示例

2)在终端输入该命令之后会弹出修改界面,将“add 3line” commit内容最前面的pick改为squash,合并commit是将新的commit合并到旧的commit中,所以是将新的commit前面的pick改为squash,如果修改错误,并且保存了结果,那么rebase将会出错,可以输入git rebase --abort取消上一次的修改,然后重新修改;
3)保存退出,然后会自动进入到修改commit内容的页面,将需要合并的commit进行修改,留下最终需要的commit,保存退出。

  • 在终端输入git log,可以看到修改后的commit。
  • git rebase可以合并多个commit,不过只能将新的commit合并到旧的commit。
    详细操作参见
  1. 合并远程分支的commit
    将远程分支pull到本地,然后按照上述操作进行commit合并,完成合并之后,强制push到覆盖远程的分支
    git push -f
    注意:使用该方法进行远程分支的commit合并时,要确保远程是你拥有绝对控制权的,否则可能会带来很多不必要的麻烦,最好这个分支是只有你一个人在使用的情况,因为git push -f会使用本地分支内容强行覆盖远程的分支,而合并commit之后,有一些历史版本会被删除,如果在次之前有人pull了这个分支,然后你又将其中的某些版本删除并进行了覆盖,其他人在操作的时候可能会出现问题。具体参考

七、强行覆盖

一)强行覆盖本地分支

如果本地分支修改了很多之后,并且commit了一版,然后发现commit的代码有问题,想使用远程分支覆盖本地分支重新开发,此时有多种方式可以实现使用远程分支覆盖本地分支的操作。
1、回退本地版本+下拉远程分支

git log
git reset --hard commit_number #通过git log命令查看需要回退的版本的commit号
git pull origin remote_branch #将远程的remote_branch 分支下拉到本地当前分支

2、更新远程代码到本地+强行覆盖
自己实际没有使用过。

git fetch #将远程代码更新到本地仓库
git reset --hard origin/master #git reset会将本地的master分支重置为刚刚fetch的内容,其中master为本地需要覆盖的分支名称

3、通过git pull --force强行覆盖
自己实际没有使用过。

git pull --force origin remote_branch:local_branch

二)强行覆盖远程分支

git push --force origin remote_branch:local_branch

  1. ubuntu16.04下Git安装及配置教程 ↩︎

  2. 【Git】(1)—工作区、暂存区、版本库、远程仓库 ↩︎ ↩︎

  3. git status 命令详解 ↩︎

  4. git操作之二:git restore ↩︎

  5. 如何在Ubuntu里用git新增分支并且提交 ↩︎

  6. git项目分支的创建,合并,远程提交 ↩︎

  7. git pull命令的用法 ↩︎

  8. git回退到某个版本,以及从过去的版本返回到新的版本(三) ↩︎

  9. git删除远程分支提交记录 ↩︎

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值