git命令行操作

来源:互联网 发布:英雄联盟mac有国服? 编辑:程序博客网 时间:2024/05/22 10:21


目录

集中式vs分布式...2

创建版本库...2

时光穿梭机...4

版本回退...4

工作区与暂存区(stage...4

管理修改...4

撤销修改...4

删除文件...5

远程仓库...5

sshkey设置...5

添加远程库...6

从远程库克隆...8

分支管理...9

创建与合并分支...9

解决冲突...11

分支策略...12

Bug分支...12

多人协作...12

标签管理...13

创建标签...13

操作标签...13

 

集中式vs分布式

central-repodistributed-repo

  1. 集中式版本控制系统必须联网才能工作

  2. 集中式版本库是集中存放在中央服务器的

  3. 分布式版本控制系统没有中央服务器”,分布式版本控制系统通常也有一台充当中央服务器的电脑,但这个服务器的作用仅仅是用来方便交换大家的修改

  4. 分布式版本控制系统的安全性要高,因为每个人电脑里都有完整的版本库

创建版本库

首先,选择一个合适的地方,创建一个空目录:

$cd/d

$mkdirgit

$cd git

$pwd

/d/git

第二步,通过git init命令把这个目录变成Git可以管理的仓库:

$ git init
Initialized empty Git repository in D:/git/.git/

向版本库中添加readme.txt文件,内容为:

I Love Yongyou

第一步,用命令git commit告诉Git,把文件提交到仓库:

$ git add readme.txt

第二步,用命令git commit告诉Git,把文件提交到仓库:

$ git commit -m "first commit"

报错,需要设置当前用户的用户名及邮箱

$ git config --global user.name "liululu"
$ git config --global user.email "liullsj@yonyou.com"

再次执行git commit

时光穿梭机

版本回退

(1)HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id

(2)穿梭前,用git loggit log--pretty=oneline)可以查看提交历史,以便确定要回退到哪个版本。

(3)要重返未来,用gitreflog查看命令历史,以便确定要回到未来的哪个版本。

工作区与暂存区(stage

git-repo

管理修改

Git跟踪并管理的是修改,而非文件。每次修改,如果不add到暂存区,那就不会加入到commit中。

修改——git add修改的文件——gitcommit-m "注释信息"

撤销修改

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,手动或用命令git checkout – file(把文件在工作区的修改全部撤销),git checkout -- file命令中的--很重要,没有--,就变成了切换到另一个分支的命令。

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD filegit reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本),就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

删除文件

手动或rm file(本地删除):

1)删除版本库

git rm file——gitcommit-m "注释"

2)误删恢复

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

远程仓库

sshkey设置

1步:创建SSHKey。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开ShellWindows下打开GitBash),创建SSH Key

$ ssh-keygen -t rsa -C " liullsj@yonyou.com "

$ cat /c/Users/wangyudong/.ssh/id_rsa.pub

2步:在git托管平台上设置公钥

为什么GitHub需要SSHKey呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

添加远程库

首先,登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库:

目前,在GitHub上的这个learngit仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。

现在,我们根据GitHub的提示,在本地的learngit仓库下运行命令:

$ git remote add origin git@github.com:whyuds/yongyou.git

下一步,就可以把本地库的所有内容推送到远程库上:

$ git push –u origin master

从远程库克隆

现在,假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆。

首先,登陆GitHub,创建一个新的仓库,名字叫gitskills

github-init-repo

我们勾选Initializethis repository with a README,这样GitHub会自动为我们创建一个README.md文件。创建完毕后,可以看到README.md文件:github-init-repo-2

现在,远程库已经准备好了,下一步是用命令git clone克隆一个本地库:

$ git clone git@github.com:michaelliao/gitskills.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.

分支管理

创建与合并分支

首先,我们创建dev分支,然后切换到dev分支:

$ git checkout -b dev
Switched to a new branch 'dev'

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

$ git branch dev
$ git checkout dev
Switched to branch 'dev'

然后,用git branch命令查看当前分支:

$ git branch
* dev
  master

git branch命令会列出所有分支,当前分支前面会标一个*号。

然后,我们就可以在dev分支上正常提交,比如对readme.txt做个修改,加上一行:

ILove Yongyou So Much

然后提交:

$ git add readme.txt 
$ git commit -m "branch test"
[dev fec145a] branch test
 1 file changed, 1 insertion(+)

现在,dev分支的工作完成,我们就可以切换回master分支:

$ git checkout master
Switched to branch 'master'

现在,我们把dev分支的工作成果合并到master分支上:

$ git merge dev

合并完成后,就可以放心地删除dev分支了:

$ git branch -d dev
Deleted branch dev (was fec145a).

解决冲突

新建feature1分支,修改readme.txt文件为

ILove Yongyou Not Much

并通过git add commit提交至分支。

切换至master分支,并修改readme.txt文件为

ILove Yongyou

并通过git add commit提交至分支。

这种情况下,Git无法执行快速合并,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,我们试试看:

$ git merge feature1 

Git<<<<<<<=======>>>>>>>标记出不同分支的内容,我们修改如下后保存:

ILove Yongyou So Much

再提交:

$ git add readme.txt 
$ git commit -m "conflict fixed"
[master 59bc1cb] conflict fixed

分支策略

在实际开发中,我们应该按照几个基本原则进行分支管理:

首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

所以,团队合作的分支看起来就像这样:

git-br-policy

Bug分支

1)修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;

2)当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop或者git stashapply——git stashdrop,回到工作现场。

3Stash后,工作区是干净的,工作现场用git stash list命令查看。

多人协作

多人协作的工作模式通常是这样:

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

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

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

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

如果gitpull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令gitbranch --set-upstream branch-name origin/branch-name

标签管理

创建标签

1)命令git tag<name>用于新建一个标签(git tag查看所有标签),默认为HEAD(最新提交),也可以指定一个commit idgit log --pretty=oneline --abbrev-commit

用于查找commit id),即git tag<name> commit id

2git tag -a<tagname> -m "注释"可以指定标签信息(-a指定标签名,-m指定说明文字);

3git tag -s<tagname> -m "注释"可以用PGP签名标签(-s用私钥签名一个标签);

4)命令git tag可以查看所有标签。

5git show<tagname>查看标签信息。

操作标签

1)命令git pushorigin <tagname>可以推送一个本地标签;

2)命令git pushorigin --tags可以推送全部未推送过的本地标签;

3)命令git tag -d<tagname>可以删除一个本地标签;

4)命令git pushorigin :refs/tags/<tagname>可以删除一个远程标签。

 

0 0
原创粉丝点击