zoukankan      html  css  js  c++  java
  • git使用笔记

    git在我目前看来,有两大好处优点1、版本回退 2、分支,适用于团队协作开发

    我是根据廖老师学的的git教程,边实践边做笔记,以下是笔记

    git config --global user.name “name”

    git config --global user.email “email”

    cd  path(需要创建仓库的项目的目录)

    在此目录下 输入git init 即创建好了代码工作库,此目录下会有个.git隐藏文件,用来记录我们的git操作,删库直接删除文件夹就好了

    在该目录下写代码文件,写好后

    使用git add 文件名/目录名/.  (.表示添加所有文件)

    git commit -m “描述(关于改动的描述或者什么描述)

    至此提交完了代码文件

     

    当改动了代码文件,可以使用git diff 文件名 可以查看对上一文件做了什么修改//好像要在提交前才能查看

    git status 可以查看当前仓库状态

     

    这个图中可以看出,当前将要提交的修改包括1.txt  //在此之前进行了一次add操作

    git log 命令可以查看历史记录,显示从最远到最近提交操作

     

    也可以加--pretty=oneline 参数,会清晰很多

     

    有一串很乱的数值,这是commit id(版本号),它是经过sha1得到的

    退回之前的版本//这就是git的强大之一

    git reset --hard head^

    head表示当前版本,head^表示上一版本,以此类推,多的话就可以用类似head~100

    还可以用 commit id号,而且不需要全部完整的id号,只要给出几位(..稍微多点,5,6位吧)就可以还原到指定版本号

    此时还原到上一版本后git log已经看不到还原前的版本了,但还是可以通过git reset --hard 还原前版本的commit id

    由此可知,只要指定commit id就可以往前或往后还原版本。如果bash关闭了,或者之前没有用log查看commit id那么可以使用git reflog查看,它记录了每一次命令

    git checkout -- filename  撤回修改,两种情况

    一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

    一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

    如果已经提交到了暂存区,那么可以通过git reset head filename把暂存区的修改撤销掉(unstage),重新放回工作区,再用git checkout -- filename 回到版本库时版本//注意--后面有个空格

    rm  filename  删除文件//但版本库的文件没有删除,可以通过git checkout -- filename恢复到版本库中的文件

    git rm filename  同时删除版本库的文件

    连接github

    创建rsa密钥

    ssh-keygen -t rsa -C "youremail@example.com"

     

    id_rsa是密钥,id_rsa.pub是公钥,中间创建是会有一堆问题,就是让你设置特殊的自己的密钥之类的(...英文没多看),因为不是什么很重要的东西,直接一直回车默认选项就好了

    然后是打开登录github,进入setting

     

    点这个创建sshtitle随便填,key里面粘贴id_rsa.pub里面的所有内容,然后点add ssh key

    然后在github上创建远程仓库

     

    之后的页面差不多都可以直接看懂,repository name一般都设置和自己电脑上的仓库名一样就好了,这样方便识别。选择piblicprivate要钱....

    最后create repository

    然后git关联github的仓库

    git remote add origin git@github.com:(你的github账户名)/github上的仓库名.git

    完成后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的。

    接下来就可以把内容推送到远程库中

    git push -u origin master      //master是什么,后面会提

    这是第一次推送,加上了-u,且第一次会出现一个询问,输入yes并回车就好了//也可以自己看看英文意思

    后面就可以简化命令了 git push origin master

    github上把远程库全部复制到本地

    git clone git@github.com:(github账户名称)/远程库名.git

    因为是克隆仓库,所以也会有.git隐藏文件

    每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。//不同分支上互不影响,最后可以合并分支

    初始默认有个master分支,就是前面的master

    创建分支

    $ git branch tian        //创建分支(tian是自定义的分支名)   

    $ git checkout tian      //切换分支

    也可以一条命令 git checkout -b tian

    git branch列出所有分支,当前分支前面有个*

    合并分支 git merge tian  //合并指定分支到当前分支

    合并后可以删除分支了  git branch -d tian

    分支之间互不影响,看下面例子:

    这是处于master分支时,我建立的文件

     

    切换到tian分支,然后在本地修改了1.txt

     

    接着add commit一波后,再切换到master分支,可以去本地打开文件看看,它又变成了原来的文件内容

    合并之后好像并不是直接覆盖,因为我试了把master合并到tian,而不是把tian合并到master,但文件内容没有变成原先master时的文件内容。到此我有些猜想,但不能确定,以后有机会或者碰到了再试试。

    冲突问题...

    如果在tian分支下提交了1.txt,然后切换到master分支下,修改1.txt后再次提交,git就会提示错误,需要手动修改git status也可以告诉我们冲突的文件

    git log --graph --pretty=oneline --abbrev-commit  //查看分支历史,带图形

    通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

    如果要强制禁用Fast forward模式,可以采用参数--no-fGit就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

    --no-ff方式的git merge

    git merge --no-ff -m "merge with no-ff" dev   //要加上-m  因为会创建commit

    bug分支:你正在做一个分支上做项目,但接到一个bug修复任务

    git有个stash命令用来保存当前工作现场,保存完后可以切换到bug分支进行操作,然后切换到该bug原先所在的分支,再merge 再删除bug分支,再就可以回到正在工作的分支上工作

    git stash list  查看工作现场

    有两种恢复方式

    一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

    另一种方式是用git stash pop,恢复的同时把stash内容也删了:

    你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:

    $ git stash apply stash@{0}

    当伙伴从远程库clone时,默认只能看到本地的master分支,若要在tian分支上开发,就必须创建origintian分支到本地,于是需要使用

    git checkout -b tian origin/tian               //不知道后面的是什么格式还是随便

    如果他都提交了某文件,而你也对此文件进行了修改并提交,则会产生冲突

    则需要git pull把最新的提交抓下路,在本地合并解决冲突,再推送

    git branch --set-upstream tian origin/tian   //git pull 前需要链接本地分支和远程分支

  • 相关阅读:
    [CF997E] Good SubSegment
    CF916E
    BZOJ2006 超级钢琴
    BZOJ4571
    凸包总结
    树形DP入门
    bzoj4300 绝世好题(位运算+DP)
    bzoj4552 [Tjoi2016&Heoi2016]排序 (线段树+二分)
    SP1716 GSS3
    Noip2009 Hankson 的趣味题 (简单数学)
  • 原文地址:https://www.cnblogs.com/GH-D/p/8370588.html
Copyright © 2011-2022 走看看