git 学习

Git简介:
Git是目前世界上最先进的分布式版本控制系统。
集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话就很痛苦。
分布式优点:
a.分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,
这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上
b.分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,
随便从其他人那里复制一个就可以了。

1、window平台下使用git,下载安装git:

下载网址:https://git-for-windows.github.io
可以使用国内镜像网站下载 https://pan.baidu.com/s/1kU5OCOB#list/path=%2Fpub%2Fgit

安装就是傻瓜式安装
成功之后在开始菜单输入git,就会有 Git bash  、 Git GUI
我git默认安装在了 C:\Program Files\Git

备注:查看git的版本 git --version

2、安装完成后,启动使用git:

a.直接在开始菜单,输入git, 启动Git Bash
b.直接在cmd中使用,需要配置环境变量
    把C:\Program Files\Git\cmd 添加到Path中
    就可以直接使用git命令了
c.使用图形界面,在开始菜单输入git 启动Git GUI

使用命令帮助: git help clone  , 默认就会在网页打开clone 的使用方法

3、配置git仓库:

[git init]

想要一个文件夹是git仓库
cd到这个文件夹下,输入 git init 就可以在当前文件夹下生成一个 .git 的隐藏文件夹

3、第一次使用配置参数:

[git config user.name 'name']
[git config user.email 'example@test.com']
这个是配置当前的git仓库,局部生效,当前仓库配置文件路径:
D:\git\test\.gi\config 打开文件可以进行配置

想要所有仓库全局生效
git config --global user.name 'name'
git config --global user.email 'example@test.com'
当前用户的配置文件路径:
C:\Users\yourComputerName\.gitconfig 打开文件就可以配置

4、将文件放到git仓库中:

[git add]
[git commit -m "修改注释"]

a.首先把文件 readme.txt 放到当前的仓库中
b.使用命令 git add readme.txt (类似svn中的Add)
c.使用命令 git commit -m "recommend" (-m是提交的备注信息)

注意 -m 后面一定要是双引号

5、查看仓库的状态:

[git status]

有红色代表有东西需要提交到暂存区
如果是绿色就代表已经提交到暂存区了,直接commit就提交到分支库上了

6、想知道修改的内容:

[git diff readme.txt]

查看当前文件和库上的不一样的地方,commit之后就一样了

修改完成,在提交和上面一样 先add 后commit

7、查看提交的log:

[git log]
[git log --pretty=oneline]

git log
默认输出的是从最近到最远排序的,看起来比较乱

git log --pretty=oneline
在一行显示修改的记录
例如:
    ab3356da9ba0df81d8d77b731042e4eacc1f0f20 add 
    48c53ffdda1a8f3d3817d249a86d30db6ebd2572 delete hello.txt file

8、版本回退:

[git reset --hard HEAD^]
[git reset --hard ab3356]

Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本
上一个版本就是HEAD^,上上一个版本就是HEAD^^
往上100个版本写成 HEAD~100

回退上一个版本:
git reset --hard HEAD^ (注意这个命令在cmd中会出错,所以要在Git Bash中运行)
这个时候通过 git log --pretty=oneline 查看最新的log就是你回退的那个版本了

如果你反悔了,想用最新的那个版本:
找到那个commit id是ab3356d...
git reset --hard ab3356 就可以恢复了(这个id没有强制要求几位,能唯一识别就行)

注意:如果你关了cmd窗口,或者关闭电脑,找不到commit id了怎么办。
    我们可以通过 git reflog 查看到你的每一次的commit记录,其中就可以看到id了
所以我们知道id就可以回退到任意一个版本

9、工作区和暂存区的概念:

工作区(Working Directory):就是你在电脑里能看到的目录,比如我的d:/git/test
版本库(Repository):工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库
    Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区(window下面有个index的文件)

git add 把文件添加进去,实际上就是把文件修改添加到暂存区
git commit 提交更改,实际上就是把暂存区的所有内容提交到当前分支

注意:因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

10、撤销修改:

[git checkout -- readme.txt]

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- readme.txt
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改。
    如果你直接 git checkout -- readme.txt 暂存区是不会改变的,你后面commit就会提交上去
    解决方法:
    第一步用命令git reset HEAD readme.txt ,就回到了场景1,使用 git status 查看是红色的
    第二步 git checkout -- readme.txt
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交.
    直接回退上一个版本
    git reset --hard HEAD^

注意:一定要加git checkout -- readme.txt 一定要加 --

11、删除文件:

[git rm]

先新建一个 test.txt 文件
git add test.txt
git commit -m"add test.txt"

这个时候你使用rm命令删除 test.txt
再用 git status 查看就是红色的状态了
如果想恢复 git checkout --  test.txt
如果真的想删除
    不能直接 git commit -m"delete test.txt"
    应该:
    git rm test.txt
    git commit -m"delete test.txt"
    就在仓库中删除了

如果还想恢复直接回退版本

12、查看、创建、合并、删除分支:

[git branch] 查看当前分支,绿色表示当前分支
[git checkout -b dev] 
[git merge dev]
[git branch -d dev]

创建dev分支,然后切换到dev分支:
    git checkout -b dev
        -b参数表示创建并切换,相当于以下两条命令
        git branch dev  创建dev分支
        git checkout dev 切换到dev分支

    我们切换到了dev分支,在readme.txt上修改,提交到dev分支上
    然后我们 git checkout master 切换到master分支上,发现在dev分支上的修改没有了

合并分支:
    将dev分支修改合并到master分支上
    git checkout master 切换到当前master分支 
    git merge dev ,完成分支合并
    提示:Fast-forward 这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。

删除分支:
    git branch -d dev

所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全.

13、冲突解决:

演示:
a.新建分支feature1
    git checkout -b feature1
    修改最后一行,commit提交
    git add readme.txt
    git commit -m"modify at feature1"
b.切换到master分支
    git checkout master
    也同样修改最后一行,commit提交
c.此时合并就会冲突,因为两个分支同时修改了同一个地方
    git merge feature1 
    提示冲突:
        Auto-merging readme.txt
        CONFLICT (content): Merge conflict in readme.txt
        Automatic merge failed; fix conflicts and then commit the result.
    Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容。
d.我们手动解决冲突,你想最后一行是什么就修改成什么
    git add readme.txt
    git commit -m"resolved"
e.这样冲突解决了,正常合并到了master分支,就可以删除feature1分支
    git branch -d feature1

备注:使用 git log --graph --pretty=oneline --abbrev-commit 可以查看分支合并的情况

14、分支策略:

在实际开发中,我们应该按照几个基本原则进行分支管理
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活!
干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本。
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

注意:
    通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
    使用 git merge --no-ff -m "merge with no-ff" dev 合并分支
        合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

15、bug分支:

[git stash]
[git stash pop]
[git stash apply stash@{0}]

当你接到一个修复一个代号000的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交。
并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,怎么办?
幸好,Git还提供了一个stash功能,可以把当前工作现场“储藏”起来

a.使用 git stash 保存当前的工作状态。
b.如果你想在master分支上修改bug
    git checkout master

    再创建临时修复bug分支
    git checkout -b issue-000

    修复完成后合并issue-000到master分支上
    git checkout master
    git merge --no-ff -m "merged bug fix 101" issue-000

    删除分支
    git branch -d issue-000
c.恢复dev分支的工作状态:
    git checkout dev
    git status 可以看到当前的工作区是干净的

    git stash list 查看stash的内容
d.恢复:
    第一种方式:git stash apply 恢复后,stash内容并不删除,你需要用git stash drop来删除
    第二种方式:git stash pop 恢复后,stash内容并删除

16、强行删除一个分支:

[git branch -D feature]
如果要丢弃一个没有被合并过的分支,可以通过 git branch -D feature 强行删除。

17、推送分支:

[git push origin master]

当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin
git push origin master 把本地的master仓库推送给远程仓库
git push origin dev  把本地的dev分支推送到远程仓库

并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?
    master分支是主分支,因此要时刻与远程同步;
    dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步

18、拉取分支:

本地创建和远程分支对应的分支
git checkout -b branch-name origin/branch-name

建立本地分支和远程分支的关联
git branch --set-upstream branch-name origin/branch-name;

从远程抓取分支
git pull ,如果有冲突,要先处理冲突

19、创建git标签:

[git tag] 查看所有标签
[git tag v1.0] 创建标签

为什么要标签?
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。

如果需要在以前的commit id上添加tag,可以:
git tag v0.9 6224937

注意:tag不是按照时间顺序来排的,是按照字母顺序排序

20、查看标签信息:

[git show v1.0]

21、删除标签:

[git tag -d v0.0]

22、git取别名:

[git config --global alias.st status]

设置完成后
git st == git status

23、使用github管理代码:

1、注册github账号
    注册完成后,创建一个Repository,完成以下信息即可
    a.输入 Repository name : hello world
    b.Desciption :可以随便输入点啥,例如:this is my first github repository
    c."Initialize this repository with a README" 勾选的话默认就会有个README文件。可以选的。
    d.点击“Create repository”,就完成了自己的github仓库的创建了。

2.我们把github作为我们的远程仓库,现在我们在本地使用。(前提是已经安装好了git客户端)
    a.在自己的电脑上找一个目录用来同步远程仓库
        D:\git\github
        cd到这个目录,运行命令 【git clone https://github.com/gaopinqiang/helloworld.git】
        后面这个地址就是你的github的仓库地址
    b.因为我们是git clone下来的,本地仓库自动就和远程仓库关联起来了。
        我们本地就会多一个helloworld文件夹
        D:\git\github\helloworld 这个文件夹就是和远程的仓库同步上的。里面就有一个README文件了。

3.为了更好的使用git命令,我没有直接用git命令操作,比较麻烦。我选择使用android studio里面的VCS(版本控制系统)
    用PyCharm 这个编辑器也是一样,都是netbrain公司出的,界面都一样
    a.我们创建一个文件 hello.py
    b.右击这个文件--> Git --> Add
    c.右击这个文件或者点击菜单VCS --> Git --> Commit File... ,填写提交信息,提交到本地。
    d.提交完成后,push到远程。VCS --> Git --> Push...
        master--> origin:master ,点击push后会让你输入你的github的账号密码。
    e.账号密码验证完成,会在你的github仓库里面多了一个hello.py的文件。

到这里基本的github使用就完成了,后面就是不断的commit 和 push的操作了

再看看创建分支
1、我们在本地创建一个信息分支development
    VCS --> Git --> Branches --> New Branch 输入名称:development
2、在这个分支上修改文件提交
    修改完后,VCS --> Git --> Commit File... 提交到本地仓库
3、push到远程
    VCS --> Git --> Push... ,这个时候就不用再次输入账号密码了。直接就可以提交成功
    此时去github网站上看,你的分支多了一个development
就是这么简单

我们再将development这个分支合并到master看看
1、切换到master主分支
    VCS --> Git --> Branches --> master --> Checkout
2、合并分支
    VCS --> Git --> Merge Changes
    勾选本地的development,点击Merge。如果有冲突就需要手动解决冲突。
    注意只能手动解决没有更好的方法,因为只有你自己知道你要怎么合并!!!
3、合并完成了,push到远程,远程就有了你本地所有修改的历史记录了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值