zoukankan      html  css  js  c++  java
  • Git的介绍及使用

    一、配置用户信息:

    配置用户名和邮箱:

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

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

    Git把用户的配置信息放在C:Usersmis.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:Usersmis.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

     

     

     

     

     

     

     

  • 相关阅读:
    nginx+vue刷新404
    java-Object类的解析(持续更新)
    Python源码学习(六)-PyCodeObject初探
    经典算法之不定方程问题
    MySql中的视图的概念及应用
    数据结构之 折半插入排序
    mahout算法源码分析之Itembased Collaborative Filtering实战
    【Android】为Android虚拟机创建SDCard
    30个酷毙的交互式网站(HTML5+CSS3)
    项目总结——也谈svn版本库迁移
  • 原文地址:https://www.cnblogs.com/baichunyu/p/11152227.html
Copyright © 2011-2022 走看看