git 学习

来源:互联网 发布:淘宝正常一天能出几单 编辑:程序博客网 时间:2024/06/02 05:50

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 Bashb.直接在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.txtgit 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-000c.恢复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分支对应起来了,并且,远程仓库的默认名称是origingit 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