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
posted @ 2018-11-16 15:55  bwwbww  阅读(161)  评论(1编辑  收藏  举报