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

     

     

     

     

     

     

     

  • 相关阅读:
    UVA 1386 Cellular Automaton
    ZOJ 3331 Process the Tasks
    CodeForces 650B Image Preview
    CodeForces 650A Watchmen
    CodeForces 651B Beautiful Paintings
    CodeForces 651A Joysticks
    HUST 1601 Shepherd
    HUST 1602 Substring
    HUST 1600 Lucky Numbers
    POJ 3991 Seinfeld
  • 原文地址:https://www.cnblogs.com/baichunyu/p/11152227.html
Copyright © 2011-2022 走看看