• git 基本使用


    1.集中式版本管理系统和分布式版本管理系统

    集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。

    集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟。

    分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

    分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

    2.创建版本库

    git init

    该命令会将该目录变成git可以管理的仓库。

    (注意:不要轻易使用Windows自带的文本编辑器,他会带来很多的问题,可以使用notepad++,可以设置他的默认编码为UTF-8 without BOM)

    3.添加文件

    1)git add aaa.txt

    2)git commit -m "加上文件说明"

    add 可以多次添加文件,git add . 可以添加所有文件。commit可以一次提交所有。

    4.查看状态

    git status

    该命令可以让我们时刻掌握仓库当前的状态

    git diff  文件名

    该命令查看difference,显示的格式正是Unix通用的diff格式

    5.查看git的提交历史

    git log

    为减少输出的信息,可以添加--pretty=oneline参数

    eaadf4e385e865d25c48e7ca9c8395c3f7dfaefcommit id(版本号)一个SHA1计算出来的一个非常大的数字,用十六进制表示。为防止同一个版本库里工作人员提交的冲突。

    6.版本回退

    在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

    git reset --hard HEAD^

    查看文件内容 --- cat 文件名。

    如果想要回退到回退前的版本,只要知道版本号就可以:

    git reset --hard 1094a 版本号没必要写全,前几位就可以了,Git会自动去找。

    那如何找到commit ID 呢?git中有一个命令用来记录你的每一次命令
    git reflog

    7 工作区和暂存区

    工作区:电脑里能看到的目录。
    工作区中一个隐藏的.git目录不算工作区,而是git的版本库。
    在git的版本库中存在一个重要的东西称为stage(index)暂存区和git为我们创建的第一个分支master,以及指向master的指针叫head
    git add 其实就是将文件添加到暂存区,而git commit 实际上试讲暂存区中的内容提交到当前分支。

    8.修改撤销

    1)当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file

    2)当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了1),第二步按1)操作。

    3)已经提交了不合适的修改到版本库时,想要撤销本次提交,使用版本回退。(前提,没有远程提交)

    9. 删除文件

    git rm file
    
    git commit -m "remove"

    如果手动误删

    git checkout -- test.txt

    git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

    命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容

    10. 本地仓库与远程仓库关联

    git remote add origin git@server-name:path/repo-name.git

    远程库的名字就是origin

    git push -u origin master

    git push命令,实际上是把当前分支master推送到远程。

    由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。git push origin master

    11.远程库克隆到本地

    git clone git@github.com:michaelliao/gitskills.git

    12.创建分支

    git checkout -b dev

    -b参数表示创建并切换,相当于

    git branch dev
    git checkout dev

    13 查看当前分支

    git branch

    14 分支合并

    git merge dev

    git merge命令用于合并指定分支到当前分支。

    15 删除分支

    git branch -d dev

    16 冲突解决

    使用git status查找冲突的位置

    Git用<<<<<<<=======>>>>>>>标记出不同分支的内容

    修改冲突在提交

    git log --graph命令查看分支合并图

    17 分支管理策略

    合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

    git merge --no-ff -m "merge with no-ff" dev

    请注意--no-ff参数,表示禁用Fast forward;

    查看: git log --graph --pretty=oneline --abbrev-commit
    合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

    18 BUG分支

    git stash

    可以将当前工作线程储藏起来,以后可以恢复在使用。

    查看刚才的工作现场
    git stash list

    Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:

    一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

    另一种方式是用git stash pop,恢复的同时把stash内容也删了:

    可以恢复指定的stash:
    git stash apply stash@{0}

    19.feature分支删除

    Git友情提醒,feature-vulcan分支还没有被合并,如果删除,将丢失掉修改,如果要强行删除,需要使用大写的-D参数。

    20. 查看远程库

    git remote
    git remote -v

    21推送分支

    Git就会把该分支推送到远程库对应的远程分支上
    git push origin(远程) master(本地)
    如果推送失败,用git pull抓取远程新提交的代码

    • master分支是主分支,因此要时刻与远程同步;

    • dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;

    • bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;

    • feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

    22 本地分支和远程分支的关联

    git branch --set-upstream branch-name origin/branch-name

    在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

    创建远程origindev分支到本地,于是他用这个命令创建本地dev分支:

    git checkout -b dev origin/dev

    解决冲突

    先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送;

    git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接;

    23 多人协作

    1. 首先,可以试图用git push origin <branch-name>推送自己的修改;

    2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

    3. 如果合并有冲突,则解决冲突,并在本地提交;

    4. 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

    24 rebase操作

    rebase操作的特点:把分叉的提交历史“整理”成一条直线,看上去更直观。缺点是本地的分叉提交已经被修改过了。

    25 创建标签

    git tag v1.0

    查看标签

    git tag
    git show v0.9

    对某次commit id 打标签

    git tag v0.9 f52c633

    还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字

    git tag -a v0.1 -m "version 0.1 released" 1094adb

    26 删除标签

    git tag -d v0.1

    因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。

    如果要推送某个标签到远程,使用命令

    git push origin v1.0

    一次性推送全部尚未推送到远程的本地标签
    git push origin --tags

    删除远程标签 ---先从本地删除,然后,从远程删除。

    git tag -d v0.9
    git push origin :refs/tags/v0.9
  • 相关阅读:
    (Go)03.go类型
    (Go)02.go 安装delve调试工具测试
    (Go)01.Windows 安装 Go语言开发环境以及使用
    etcd创建集群并增加节点
    libhiredis.so.0.13 => not found 缺少
    Linux查找并杀死僵尸进程
    k8s istio 配置请求的路由规则
    k8s 安装并试用Istio service mesh
    k8s Job、Cronjob 的使用
    k8s Gitlab CI/CD 之自动编译Docker镜像并推送到指定的Registry
  • 原文地址:https://www.cnblogs.com/ntbww93/p/9969795.html
Copyright © 2020-2023  润新知