Git的使用

作者: 张培_ | 来源:发表于2016-12-04 15:13 被阅读75次

    git的安装

    由于我已经使用git将近有大半年的时间了,早已安装过,就没法上图说明,这里就不细说了

    版本库(仓库Repo)相关

    • 概念:版本库(仓库)其实就是一个由git管理的文件夹,你在该文件夹
      中创建修改删除文件都有git监控
    • 创建方法:
    • 创建一个空的文件夹 $ mkdir testGit
    • 查看文件夹中现在没有任何文件 $ ls -a testGit
    • 把该文件夹转变成一个由git监管的文件夹:$testGit git init
    • 此时在查看该文件夹中就会有一个.git文件夹,说明此刻该文件夹就开始由git跟踪监控了
    git仓库的创建
    • 对仓库内容修改:
    向仓库中添加.gitignore文件
    • .gitignore文件作用:其中写了那些文件不需要有git追踪监控,git可以完全不管这些文件,并且你也没办法把这些文件push的远端仓库
    • .gitignore文件创建:在你的仓库中touch一个名字是.gitignore(千万不要忘记前面的. 这说明这个文件是一个隐藏文件不用ls -a是没办法看到的)
    • 向.gitignore文件中写入你想忽略的文件:两个方法
      1.在webstrom中安装.ignore插件,选中你写的项目类型自动添加内容到.gitignore文件中
      mac的使用方法:
      使用快捷建:ctrl + N :
      选定第一个
      在以下菜单中选中你的项目类型插件会自动为你添加.gitignore文件中的内容
      Paste_Image.png
      举个例子:你向创建一个node项目
      首先你得选中jetBrains:因为我是用的是IDEA的编译器,而 jetBrains是生产IDEA各种编译器的公司,这些编译器在都会自动在你的项目中添加如同.idea这一类的文件,帮助你运行你的项目,选中后就会自动帮你在.gitignore文件中添加.idea这种文件
      Paste_Image.png
      然后你要选中node:因为我这是node项目
      Paste_Image.png
      ps:我经常写js项目使用npm包管理器,其中有一个巨大的node-modules文件夹一定不能上传到git远端库中,因此必须有.gitignore文件中添加node-module让他被git忽略
      此时我的仓库使用npm init有npm包管理器管理
      Paste_Image.png
      2

    仓库修改相关

    • 你在本地的所有修改只要没有做过任何add.commit.push所有的内容现在都在工作区,git监管你现在工作区的操作,通过git status可以查看工作区有哪些修改,现在红色字样的文件都是你在工作区的修改
    Paste_Image.png

    发现.idea竟然也被git监管了,赶紧在.gitignore文件中添加.idea

    • 这些修改通过git add 文件路径/.就可以被添加到暂存区,一下绿色字样的文件就是已经添加到暂存区的文件
    Paste_Image.png
    Paste_Image.png

    此时暂存区有两个文件

    • 现在你就可以把暂存区中的所有内容作为一次commit一并添加入你当前分支生成一个commit节点
    Paste_Image.png
    • 接着你好想把你的项目放到远端库中让很多人可以浏览
    • 你得先将本地仓库和你的远端仓库关联,但是你远端的仓库并不知道想跟他关联的主机是不是被允许的,此时你需要在你使用的这台电脑上产生一个秘钥,标志你这台电脑,并且用这个秘钥在远端配置,这样远端仓库就可以允许你这台电脑对他进行操作啦

    向远程库提交本地仓库中的代码

    • 在你的远端github上创建一个新的Repo


      Paste_Image.png
    • 选定SSh地址进行copy


      Paste_Image.png
    • ssh和http克隆区别
      这两种方式的主要区别在于:使用https url克隆对初学者来说会比较方便,复制https url然后到git Bash里面直接用clone命令克隆到本地就好了,但是每次fetch和push代码都需要输入账号和密码,这也是https方式的麻烦之处。而使用SSH url克隆却需要在克隆之前先配置和添加好SSH key,因此,如果你想要使用SSH url克隆的话,你必须是这个项目的拥有者。否则你是无法添加SSH key的,另外ssh默认是每次fetch和push代码都不需要输入账号和密码,如果你想要每次都输入账号密码才能进行fetch和push也可以另外进行设置

    • git remote add origin <你的远端仓库地址>

      Paste_Image.png
    • 这是我想push代码,把本地仓库放到远端

    • 第一次push需要设置好远程库的名字以及push的代码放到远程库的哪一个分支上 origin是远程库的默认仓库名字,因此第一次push需要写成如下样子

      push
      git remote -v:查看你现在关联的远程仓库
      git remote add origin(可以起别的名字是远程仓库名字) master(也可以识别的分支):吧当前的本地库关联到远端仓库,给远端仓库起名字是origin,并且在远端创建一个master分支把这一次push的所有commit全部按照时间顺序加到master分支上
      git remote rm origin(可以是别的远程仓库):移除当前本地库关联的名字是origin的远程仓库(一个本地库可以关联多个远端仓库)
    • 以后的每一次push可以直接git push就是把代码push到origin 的master分支上,或者使用git push origin master每次push都设置好要push的位置

    从远程库拉取

    • 如果你看到一个很好的项目想拿下来git clone <项目的http/ssh地址>,如果你clone项目的github配过你这台电脑的秘钥,那么你可以采用ssh地址clone,这样你就具有修改代码并且push代码的权利,如果没有配过秘钥,你只能使用http地址clone,但是这种clone方式不能像远程仓库中push代码
      • 这是从我的仓库使用ssh方式clone代码


        Paste_Image.png
    • 这是从别人的仓库使用ssh


      Paste_Image.png
      Paste_Image.png
    • 从别人的仓库中使用http地址clone


      你需要有别人的github密码才能push
    • 如果此时你和别人一起开发,当你在写代码的时候,别人已经向仓库中提交了一次代码,这是master分支上多了一个节点,但是你本地却停留在上一个节点,这是你本地代码就跟远端代码不一样了,如果此时你push,git就会提醒你当前代码不是最新的,你要使用git pull --reb把远端代码拉下,和本地代码在工作区合并在一起
    • git pull=git fetch+git merge:使用git fetch吧远端的origin master整个拿到本地,然后使用git merge:把本地master上没有的节点+这次commit的节点合并解决冲突在本地成为一个新的commit节点,此时你可以push到远端
    • git pull --reb=git fetch+git rebase:使用git fetch吧远端的origin master整个拿到本地,然后使用git rebase:把远端有但是本地没有的节点先加到本地mater中,然后把这次的第一个commit节点加到master中如果有冲突解决冲突,然后在使用git rebase --continue把下一个commit节点加进来在解决冲突,直到git rebase --continue没有错误冲突,此时你就可以push代码了

    版本回退相关

    • 你工作区做了某些修改,这是你不想要工作取得修改了,你可以使用
      git checkout <文件路径>一旦checkout你的修改一定绝对完全找不回来了!!曾经写过好多代码你不小心checkout的我好辛酸!!
      此时工作区的代码会被checkout到:
    • 1.如果现在暂存区有没有commit的代码,那么回到暂存区状态
    • 2.如果暂存区没有代码,回到最近的一次commit状态

    • 新添加的文件是没办checkout掉的,你可以直接手动删除这个文件


      Paste_Image.png
    • git checkout:你可一看到红色字样没有了

      Paste_Image.png
    • 如果此时你把某些修改add后放进了暂存区,但是你不想要这些修改了,你可以使用git reset HEAD <文件路径>:从暂存区撤销这个文件的这次add,让这次修改回到工作区

      Paste_Image.png
      Paste_Image.png
    • 撤销某次commit,你可以使用git log查看那次commit的号码,
      然后直接使用git reset --hard <commit号码>HEAD指针指向最近的一次commit,HEAD^代表上一次commit,HEAD^^上上次,因此你也可以采用git reset --hard HEAD^:会退到上一次commit

      git log
      git reset --hard commitID
      git log new
    • 撤销某次commit还可以使用git reset --soft <commit Id>,这种方式会使得你的回到上次commit但是把这次commit的内容放进stage中,就是出现绿色字样

    • git reflog和git log前者你可以看到你所有的commit(包含被reset掉的commit)并且是按照操作顺序排序的。后者你只能看到当前有的commit

    评论相关

    • 如果你想向别人的仓库提交一次pull request
    • 从github上fork别人的仓库,此时你的仓库中就会多一个你刚刚从别人仓库中拿过来的仓库】在你的远程仓库中


      Paste_Image.png
      Paste_Image.png
    • 如果你想给别人的代码提交一个issue,进入到别人的仓库中点击new issue


      Paste_Image.png
      Paste_Image.png

      写好提交即可

    • 如果你想给某一次pull request评论


      Paste_Image.png
    • 如果你想给某一次commit评论
    • 你可以点开某一次commit然后会在你鼠标经过的的每一行有一个小加号


      Paste_Image.png

      点击一个就可以评论了

    分支相关

    未完待续。。。

    林老师教育我们讨论一个问题的时候不要没事拉分支,所以我就没怎么扩展以后遇到问题再慢慢补充吧~

    相关文章

      网友评论

        本文标题:Git的使用

        本文链接:https://www.haomeiwen.com/subject/wxccmttx.html