zoukankan      html  css  js  c++  java
  • git学习

      远程库和本地库就是经过一个push和pull的过程进行代码的下载更新,还可以通过fork远程库复制了一个远程库(会自动添加本地库),这样就可以让项目团队之外的人来参与项目的开发,然后团队外的人在提出push request请求在团队marge(审核)通过之后代码就会被更新进来了。
      至于签名就是一个代表个人身份的id,就是像我们起的用户名一样(可以真实不存在),有项目级别(仓库级别)和系统级别两种,前者只在当前本地库有用,后者是同一个windows用户都有用,命令分别是git config(存储在当前目录下的.git文件下)和git config --global(存储在家目录下的.gitconfig文件夹下),签名采用就近原则,即项目级别和系统级别同时存在优先采用项目级别,不允许二者皆无。
      快速的打开git bash是在你想打开它的地方(例如d盘)右键git bash here,就行了同时学到了命令ll(查看文件内容,ll后面可以加文件路径进行查看否则默认查看当前位置)、ls -la(查看文件内容但是可以看到隐藏文件)、ls -l|less(分屏查看即跳转到另一个屏幕用ctrl+z可以回来)、cd(用来进入特定的文件)、mkdir(创建文件夹)、git init(初始化本地库,创建好的本地库会在.git文件下是属于隐藏文件要用ls -la命令来查看)、pwd(查看当前所处位置)、cat(查看某一个具体的文件)、cd : 切换到哪个目录下, 如 cd e:fff  切换 E 盘下面的fff 目录。当我们用cd 进入文件夹时,我们可以使用 通配符*, cd f*,  如果E盘下只有一个f开头的文件夹,它就会进入到这个文件夹、cd .. 回退到上一个目录, 注意,cd 和两个点点..之间有一个空格、pwd : 显示当前目录路径、ls(ll): 都是列出当前目录中的所有文件,只不过ll(两个ll)列出的内容更为详细、touch : 新建一个文件 如 touch index.js 就会在当前目录下新建一个index.js文件、rm:  删除一个文件, rm index.js 就会把index.js文件删除、mkdir: 新建一个目录,就是新建一个文件夹. 如mkdir src 新建src 文件夹、rm -r : 删除一个文件夹,  rm -r src 删除src目录, 好像不能用通配符、mv 移动文件, mv index.html src   index.html 是我们要移动的文件, src 是目标文件夹,当然, 这样写,必须保证文件和目标文件夹在同一目录下、reset 清屏,把git bash命令窗口中的所有内容清空。git status查看当前文件状态、git add(提交到暂存区)、git rm --cached 文件名(从暂存区中移除)、git commit(提交到工作区)、vim编辑器用i可以进入编辑模式,esc跳出编辑模式进入命令模式在下面用:+各种命令就行了、提交注释时就是在vim编辑器中进行的,:wq退回到设立了命令行,但是提交注释还是有一个简便方式就是在git commit -m"要输入的注释"[文件名]
    git log 查看版本记录,head指针指向当前版本
    git log可以附加参数 比如git log --pretty=oneline 这个命令让每个日志以一行显示
    git reflog 也是打印版本日志,但是可以显示移动到某一个版本需要移动head指针的次数
    HEAD指针是用于版本控制的关键,就是用这个指针来控制版本的前进和后退
    git reset --hard [索引值]可以直接回到该索引值的版本
    git reset --hard^从head指针从后退一个版本有几个^符号就会退几个版本
    git reset --hard~n后退n个版本
    git help [命令名]可以打开命令的帮助文档
    git help 的-soft参数仅仅在本地库移动HEAD指针
    -mixed参数在本地库移动HEAD指针的同时重置暂存区
    -hard参数在本地库移动HEAD指针、重置暂存区、重置工作区
    cat [文件名]看到是工作区的文件 status看到的是暂存区的文件
    rm [文件名]删除文件,
    若删除的文件是在本地库中在删除时的版本库中没有了这个文件,但是在这个版本库之前的版本库中还是有这个文件,所以还想要恢复这个文件,就退到以前的版本,再次得到这个文件
    若删除的文件是在暂存区的文件用git reset --hard HEAD这个命令会刷新暂存区所以文件就又回来了
    但是这两个恢复操作的前提都是
    git diff [文件名]查看文件变化
    git diff HEAD [文件名]和本地库比较文件变化
    git diff HEAD [文件名]和历史版本比较文件变化
    git diff 不加文件名就会比较当前工作区的所有的文件
    分支管理:就是在版本控制的过程中,使用多条线同时推进多个任务。master是主分支,创建分支就是从主分支中复制出来一个复制品,然后在各自开发出不同的功能,各个分支之间是互不影响的,在命名时一般以feature_[分支名],分支是可以随意删除的,不会污染其他代码,然后还可以回来合并进主分支。在主分支中可能出现bug,这时就需要修复了,可以从主分支中在分支一个出来,一般命名为hot_fix,意为热修复可以不停机的修复,修复完之后再合并。
    git branch [分支名]创建分支
    git branch -v查看分支状况
    git checkout [分支名] 切换到该分支,可以用tab键来补全
    若想接收分支的修改,要先回到要接收的分支上,然后用git merge [分支名]就将另一个分支合并过来啦
    但是在合并时会出现一种状况,就是在合并时接收的分支和提交的分支都改了同一个部分,这时就需要人为的决定要哪一个改变
    最终确定后系统会提示用git add命令标识已经解决冲突了,然后再git commit(注意此时不加文件名但是还是要有注释)
    git中文件管理模式虽然是把所有的文件都以快照流的方式保存起来看起来像是很占服务器内存,但是他是以指针的形式保存的,指针指向的是hash码,没有改变的文件指针会指向该文件相同内容的以前版本的文件,提交的时候一并提交的是提交者、注释等等,但结果会被加密成一个hash码,想一个链表一样与父对象连接在一起,在建立一个分支的时候,实质上就是新建一个指针指向一个版本,然后把head指向新建的指针,就会从master移向了新的分支
    git remote add [字符串1] [字符串2]就是将字符串起了一个简短的别称,用git remote -v可以查看所有已拥有的别称。
    git push [远程库的地址或地址的别名] [分支]就是将某个分支推送到远程端
    cd ..是退回到上一目录
    git clone [克隆地址(注意与远程库地址是相同的,而且只是用一次所以不用其别名啦)],此时克隆过来之后,其实有三个东西已经被做了,一是将远程库下载到本地库,二是本地库被初始化好了可以用ll -la查看已经有了.git文件,三是创建好远程地址的别名该别名与该远程库的地址别名是相同的,可以用git remote -v查看
    但是光有clone还不行,要是一个团队的人才能git push,所以就要在github上邀请,进入远程库的setting设置里面有一个collaborator合作者,填进合作者的github账号,获得一个邀请码,然后合作者就可以在他的github上同意了,或者复制这个邀请码线下发给他,他打开这个链接也是可以的
    pull拉取的操作是由fetch和marge两个部分组成的
    git fetch [远程库别名] [远程分支名]就是抓取远程库文件下载到本地库但是此时并没有用抓取到的文件更新本地库所以本地库还是原来的文件
    我们知道在本地库中有一系列的分支树,但是我们要注意在远程库中也有相同的分支树,他们有相同的名字甚至相同的内容但是他们却不是属于一个东西,他们是相互独立的,就像是两个完全不相影响的两个分支,所以抓取下载远程库的文件后,可以切换到远程库的分支上用git checkout [远程库地址或者别名]/[分支名]这里面的分支名可以是master
    git merge [远程库地址或者别名]/[远程分支名]将远程库的相同名字的分支与本地库进行合并
    在拉取的过程总pull操作就是fetch和merge的结合,但是一般情况下推荐把pull操作分开成fetch和merge这样在丰田车时可以检查一遍是否有问题,如果没有再放心的merge合并
    在团队合作的时候冲突是不可避免的,起冲突的原因是git的这样一个机制,当你修改的文件的部分在远程库这同一个部分也进行了变动,此时在你没有获取到远程库的最新的版本的时候git不允许你进行push的操作,因为没有接收到最新的信息时进行的修改可能已经不合时宜了,要想解决就要想pull拉取最新的远程库,这时git命令行后面的分支名会跟着一个WERNING,然后进入到冲突的文件,把特殊符号删除掉,在进行整理这个文件中你做的修改和远程库的修改都会同时出现在文件中,修改完之后就是push推送到远程库中就行了,但是要注意的一点是,冲突发生的文件提交到本地库的时候命令不用加文件名
    此时可能会有一些疑问关于git clone和git pull,这两个命令好像都是复制文件到本地,但它们有什么区别呢?实际上区别还是挺大的,git clone是复制所有文件的所有版本和所有分支,是一系列的版本全都有,git pull是拉取最新的版本的一个分支在量上完全不是一个量级,另外git clone一般用于本地只有一空文件夹没有本地库,因为git clone会帮助创建本地库,而git pull肯定是用于已经有了本地库,pull完了之后会更新本地库的所有文件与最新版本一致
    在跨团队合作时就需要fork把其他团队的远程库叉下来,你只需要其他团队远程库的地址,登陆之后点击fork按钮,fork之后当前仓库的所有人就是你自己了,然后你就可以git clone这个远程库了。紧接着修改完了之后,上传到远程库,就可以做pull request,在github的request界面先点击new pull request,然后再点击 create pull request,就行了。对面的团队在github的pull request消息就可以接收了。在接收之后两个团队之间可以进行对话聊天,不过关键的是点击commit--changes可以查看代码,审核通过之后可以merge pull request--confirm merge确认合并就可以了
    在一个github账号的情况下,可以用ssh免密登录,就不用每次使用都要登录了,先git ~进入到家目录,然后ssh-keygen -t rsa -C [github邮箱地址],完成之后系统会自动生成一个.ssh的文件,进入这个文件中的id_ras.pub文件,复制文件中的全部内容,进入到github的setting界面中的ssh and gpd keys选项,在key中粘贴刚才复制的东西,就有了ssh免密登录了,回到bash中还要重新设置ssh地址的别名git remote -v就可以使用了。至此git的大部分使用操作就差不多了。

  • 相关阅读:
    JB的IDE可视化MongoDB、MySQL数据库信息
    爬取QQ音乐(讲解爬虫思路)
    selenium实现淘宝的商品爬取
    爬取中国福彩网并做可视化分析
    Django的学习进阶(二)———— name
    xpath获取一个标签下的多个同级标签
    selenium中动作链的使用
    Error: Cannot find module 'electron-prebuilt'
    error Invalid tag name "–save-dev": Tags may not have any characters that encodeURIComponent encodes
    TypeError:mainWindow.loadUrl is not a function
  • 原文地址:https://www.cnblogs.com/wyx66688/p/10652982.html
Copyright © 2011-2022 走看看