Git的介绍及使用

一、配置用户信息:

配置用户名和邮箱:

$ git config --global user.name “chunyu”

$ git config --global user.email 1812928598@qq.com

Git把用户的配置信息放在C:\Users\mis\.gitconfig

二、初始化一个本地的git仓库:

$ git init

跟踪文件:

$git add index.html(跟踪完文件之后,这个文件被存放在暂存区中)

跟踪多个文件:

$ git add *.html  或者 $ git add .

如果文件在暂存区中,此时对文件进行修改,则需要再次将文件添加到暂存区中(add

如果对本地版本库中的文件进行修改,还没有添加到暂存区,可以查看文件的修改内容: $git diff index.html

把跟踪好的文件提交到版本库中:

$ git commit -m “add a html file” 参数-m的作用:告诉git提交解释信息为add a html file

(提交完文件之后,这个文件就被保存到本地版本库中)

查看提交记录:

$ git log (简洁版:$git log --pretty=oneline

查看工作区目前的状态:

$ git status

如果多次修改文件,并提交到本地版本库中,如果想回退到上一个版本,则:

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

$git reset --hard HEAD^//表示回到上个版本

现在回到了老版本,如果现在又想回到新版本,则:

只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个最新版本commit id6e1f7...,于是就可以指定回到未来的某个版本:

$git reset --hard 6e1f7

如果命令行窗口被关掉了,则可以使用$git reflog来查看每一次命令(历史命令)。这时找到最新版本的commit di,再使用上个命令就可以回到最新版本了。

 

撤销修改:$git checkout -- read.txt(就是让这个文件回到最近一次git commitgit add时的状态。)

 

如果修改完一个文件,并将这个文件保存到暂存区中了,但是这个时候发现修改有问题,这时可以用$git reset HEAD read.txt 命令把暂存区的修改回退到工作区。(这时相当于修改完文件,没有执行add命令,这时可以执行上个命令撤销修改。)

 

删除文件并提交到版本库:

1、手动删除文件

2、$git rm test.txt

3、$git commit -m “delete the test.txt file”

三、分支管理:

在若干次提交后,其实已经有了一个指向最后一次提交对象的master分支,它在每次提交的时候都会自动向前移动。

 

创建分支:

$ git branch testing    //这会在当前commit对象上新建一个分支指针

Git保存着一个名为HEAD的特别指针,它是一个指向你正在工作中的本地分支的指针,运行git branch命令,只是创建了一个新的分支,但不会自动切换到这个分支中去,所以,现在我们依然是在master分支上工作。

 

 

显示当前的分支:

$ git branch

切换到其他分支:

$ git checkout testing //转换到testing分支

$ git checkout -b iss53,相当于以下两条命令的合并:$git branch iss53$git checkout iss53创建分支并切换到该分支上

 

 

此时在testing分支上进行修改文件,则现在的状态为:

 

 

此时再切换回master分支:$ git checkout master

现在HEAD指针又指向master分支,并把工作目录中的文件换成了master分支所指向的快照内容,也就是说,现在开始所做的改动,将始于一个较老的版本。

 

 

在master分支上对文件进行修改,现在项目文件产生了分叉,因为刚才在testing分支上进行了一些修改,然后又回到master分支上进行了另外的修改。这些改变分别孤立在不同的分支里:

 

四、分支的合并:

当数据结构是以下状态时:

 

 

要合并master分支和hotfix分支:首先回到master分支上,$git checkout master,然后合并hotfix分支,$git merge hotfix此时的状态为:

 

注意到,合并时出现了fast-forward(快进)提示,由于当前master分支所在的commit是要并入的hotfix分支的直接上游,git只需把指针直接右移。换句话说,如果顺着一个分支走下去可以到达另一个分支,那么git在合并两者时,只会简单的把指针前移,因为没有什么分歧需要解决,所以这个过程叫做快进。

现在hotfix分支和master分支指向相同的提交版本,可以删除hotfix分支:

$git branch -d hotfix

删除没有被合并的分支:

$git branch -D hotfix

当出现以下结构,并且要合并hotfixiss53分支时,则会出现合并冲突

 

 

合并冲突:两个分支有相同的文件,而且同位置上的内容不相同,如果合并这两个分支,则会产生冲突。这个时候需要手动修改发生冲突的文件。当手动解决冲突后,用$git add test.txt 命令表示文件的冲突已经解决好了,并提交到暂存区。

 

Bug分支:

软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。

功能分支:

添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。

五、$git stash命令:在当前的分支上工作到一半,还没有提交,需要切换到其他分支上去, $git stash命令保存当前的状态,然后就可以切换到其他分支上了。

$git stash list查看存储点列表

$git stash apply 存储点名称:回到之前存储的状态

六、用SSH生成公钥和私钥:

ssh-keygen -t rsa -C 1812928598@qq.com

生成的公钥和私钥文件存储在C:\Users\mis\.ssh

公钥为id_rsa.pub,就相当于一把锁,需要放在git服务器上。

私钥为id_rsa,相当于钥匙。

测试SSH公钥是否成功:ssh git@git服务器地址(如:$ ssh git@github.com

七、克隆远程仓库:

$git clone git@远程仓库url(如:$git clone git@github.com:XiaoKongQi/testhtml009.git

当从远程库clone时,默认情况下,你只能看到本地的master分支。现在,你要在dev分支上开发,就必须创建远程origindev分支到本地,于是用这个命令创建本地dev分支:$git checkout -b dev origin/dev

推送数据到远程仓库:

$git push -u [远程仓库名] [本地推送的分支名]

(如:$git push -u origin master,把本地的master分支推送给了远程仓库,并且在远程仓库origin中创建了一个远程的master分支,远程的master分支和本地master分支关联;如果你推送的是bcy分支:$git push -u origin bcy,那么远程库会自动创建bcy分支,并与本地的bcy分支进行关联)

如果将本地的test分支推送到远程的master分支上:$git push -u origin test:master

推送本地仓库的所有分支到远程仓库上去:

$git push -u [远程仓库名] --all

查看本地分支与远程分支的联系:

$git branch -vv

查看当前远程仓库:

$git remote -v

查看远程的分支:

$git branch -r

从远程仓库抓取数据:

$git fetch [远程仓库名](如:$git fetch origin,抓取下来之后,对本地没有任何影响)

在本地分支上,合并远程分支:

$git merge 远程仓库名/分支名

只有在所克隆的服务器上有写权限,并且同一时刻没有其他人在推送数据,这条命令才会如期完成任务。如果你在推送数据前,已经有其他人推送了若干更新,那你的推送操作会被驳回,你必须先把他们的更新抓取到本地,合并到自己的项目中,然后才可以再次推送。

当从远程仓库把别人的更新抓取到本地之后,可以看看在我们推送之前,别人做了什么,

$git log --no-merges origin/master

$git pull 相当于$git fetch $git merge 远程仓库名/分支名,抓取远程数据,并在本地分支上合并远程分支。若合并有冲突,则需手动解决冲突,若合并无冲突,则本地就跟远程数据一样了。

如果本地有一个master分支和远程的origin/master分支没有建立跟踪关联,需要使用$git branch --set-upstream-to=origin/master

查看远程仓库信息:

$git remote show origin

重命名远程仓库名:

$git remote rename 原名 新名

远程仓库的删除:

$git remote rm 远程仓库名

将本地仓库与远程仓库进行关联:

$git remote add origin git@远程服务器地址(如:$git remote add origin git@github.com:michaelliao/learngit.git)(关联之后,一般要将本地master分支与远程master进行关联:$git branch --set-upstream-to=origin/master,在关联master分支之前,先git pull一下,然后再关联master分支。关联之后如果pull代码,如果报错: refusing to merge unrelated histories,就这样pull$git pull origin master --allow-unrelated-histories

八、标签:

Git中打标签非常简单,首先,切换到需要打标签的分支上,然后,敲命令git tag <name>就可以打一个新标签:(默认标签是打在最新提交的commit上的)

$ git tag v1.0

 

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

$git tag -a v0.1 -m “version 0.1 released” 1094adb

 

对老版本打标签:

①先找到历史提交的commit id$git log --pretty=oneline --abbrev-commit

②找到对应的commit id$git tag v0.9 e27928

 

查看所有标签:

$git tag

 

查看标签信息:

$git show v0.9

 

删除标签:

$git tag -d v0.1

 

推送某个标签到远程,或者,一次性推送全部尚未推送到远程的本地标签::

$git push origin v1.0$git push origin --tags

 

如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:

$ git tag -d v0.9

然后,从远程删除。删除命令也是push,但是格式如下:

$git push origin :refs/tags/v0.9

 

九、忽略特殊文件

忽略某些文件时,需要编写.gitignore,Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。.gitignore文件要提交到本地版本库中。

 

eclipse中使用git

https://blog.csdn.net/Adelly/article/details/79099772#_Toc480656628

 

 

 

 

 

 

 

 

posted @ 2019-07-08 16:51  白春雨  阅读(1244)  评论(0编辑  收藏  举报