zoukankan      html  css  js  c++  java
  • git入门

    一、集中式与分布式

    集中式:版本库存放在中央服务器,干活需要从其中取出,干完再放回去;必须联网才能工作

    分布式:没有了中央服务器之说,远端只是负责交换修改等,每个电脑上都是完整的版本库。不需联网,只需要做好了,有网再推送远端就可以与其他人交换;分支管理功能强大。

    二、安装

    0.windows 安装完成后 ,从Git Bash 进入shell界面

    1. $ git config --global user.name "Your Name"

    $ git config --global user.email "email@example.com"
    分布式版本控制系统需要每个机器自报家门:名字和email地址

    三、创建本地版本库

    $ cd f:   进入系统f盘目录  (cd 会进入系统根目录)

    $ mkdir learngit  创建learngit 目录(文件夹)

    $ cd learngit 

    $ pwd     显示当前目录

    $ git init     初始化(创建)一个版本库(跟踪控制整个当前目录文件夹 learngit),默认是master分支

    注意git下修改相关txt文件 用notepad++的UTF-8 without Bom模式,windows自带记事本会更改格式。

    四、编写文件readme 并推送到本地版本库默认master分支

    $ git status   查看当前版本库与工作目录(working directory——电脑里能看到的文件内容)之间的变化

    $ git add readme         将readme添加到stage暂存区,这里add 后面可以跟几个文件

    $ git commit  -m "create readme"  将readme 推送到本地仓库的master分支(默认分支),这里git commit 一次性推送所有stage暂存区内容到master分支,此时stage(working tree clean)里是空

    五、版本回滚

    $ git log    分布式版本控制 追踪的是版本库中快照commit的改变,git log 查看所有的改变(每个commit 都有一个版本ID, 对应一个改变)    单行显示 加 --pretty=oneline 后缀

    按时间线,每个版本都会产生一个节点,HEAD指向最终的版本节点

    $ git reset --hard HEAD^      回退到HEAD前的一个节点,HEAD~num 回退到HEAD的往前的第num节点。HEAD就是一个指向当前branch的指针引用,  branch其实也是一个指向节点的指针。

    $ git reset --hard  commit_ID的前几位

    $ git reflog   显示记录的每一次commit以及ID   (git tag 打标签也是针对每个commit ID进行的)

    $ cat readme 可以查看文件中内容

    $ git diff HEAD -- file_name     查看工作区的file_name文件与版本库中最新版本的区别。git 里面当前分支的内容控制着工作区的显示情况

    六、撤销工作区的修改:git checkout -- readme    让文件回到最近一次commitadd时的状态

    case1: 工作区修改还没有放到stage暂存区

    $ git checkout -- readme     撤销后工作区和版本库一致(其实就是用版本库的版本替换工作区的版本

    case 2: 文件readme已经放到stage暂存区,又作了修改(暂存区有想要的备份)

    $ git checkout -- readme                 撤销后就回到添加到stage暂存区之前的状态

    case 3: 工作区已经修改,然后还放到了stage暂存区(暂存区都没有想要的修改前的备份了),但还没有commit

    $ git status                                  查看一下,git会有很多提示命令

    $ git reset HEAD readme          撤销暂存区的提交 unstage,暂存区变空

    $ git checkout -- readme            此时 又可以用case1解决了

    七、删除文件

    $ rm readme               删除工作区的readme文件

    $ git status   提示工作区和版本库不同

    case1:确定要删除,因此也删除版本库中的readme文件

    $ git rm readme  

    case2:误操作 恢复工作区的readme文件

    $ git checkout -- readme     

    八、添加远程仓库。用已创建的本地仓库关联这个远程仓库(远端库名字默认 origin

    0.登录github,  create a new repo(每个repo就是一个版本库,比如 learngit)

    1.创建一个ssh秘钥关联本机和此git账户,一定要记得创建秘钥时加本人的注册git账户的邮箱。然后git认证此ssh

    2.关联本地仓库到远端仓库, 在本地仓库的分支master下 运行 $ git remote add origin git@github.com:zhaohengzhen/learngit.git    默认用SSH,很快。http模式传输速度慢

    3.$ git push -u origin master       将本地版本库当前分支推送到远端的master分支。第一次推送到远端的空库时,加上-u参数不仅作了推送,还会将本地的master分支与远端的master分支关联起来。

    4.$ git push origin master           之后推送到本地库master的内容都可以通过此命令推送至远端库的master

    九、从远程库克隆——从零开发最好的方式:先fork别人版本库,然后克隆到本地

    $ git  clone git@github.com:zhaohengzhen/origin_new_repo.git     

    十、创建和合并分支

    master指向的最后提交的节点,HEAD指向当前分支

    $ git branch dev     创建新分支dev

    $ git  branch             查看所有分支  , *前缀的是当前分支

    $ git switch dev   移动到dev上(将HEAD从master移动到dev上)。此后所做修改从dev这个分支向前延伸,但是master停在远处了。

    在dev分支进行一系列开发,最后合并到master分支上。

    $ git switch master     先跳到最终保留的分支

    $ git merge dev          将dev分支merge到当前master上

    $ git branch -d dev      删除dev分支(其实删除的是dev指针)

    如果dev分支开发完,不merge直接丢弃删除

    $ git branch -D dev 

    还可以创建加跳转分支一步到位

    $ git switch -c dev

    十一、分支策略

    git鼓励大量使用分支

    master分支应该非常稳定,一般对应发布的新版本,不能在上面干活

    多人协作时远端创建一条dev分支

    每人再创建各自的远端分支,将各自提交经常合并到dev分支,dev分支作为开发测试分支,没问题了再merge到master分支

    $ git merge --no-ff -m "merge with no-ff" dev    合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

    十二、bug分支

     $ git switch master 本来在dev开发呢,需要修复master上的bug

     
    $ git stash
    把当前工作现场“储藏”起来,等以后恢复现场后继续工作
    $ git stash pop  恢复现场

    此时master已经修复了bug,我们想master上修复的bug 提交复制到dev上
    $ git switch  dev$ git cherry-pick commit_id_bug

    feature分支
    添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。

    十三、创建标签
    $ git tag v1.0   默认打在最近一次的commit_id上
    $ git tag v0.9 f52c633    也可以指定commti_id打标签
    $ git show v0.9  查看此标签的所有信息
    $ git tag -a v0.1 -m "version 0.1 released" 1094adb    创建带有说明的标签,用-a指定标签名,-m指定说明文字

    $ git tag -d v0.1  删除标签
    $ git push origin v1.0  推送某个标签到远程
    删除远程标签:先删除本地标签,再删除远程
    0.
    $ git tag -d v0.9 删除本地标签
    1.$ git push origin :refs/tags/v0.9               删除远程标签


    十四、使用github
    • 自己只拥有Fork后的仓库的读写权限;

    • 可以克隆自己fork后的仓库到本地,修改后推送到自己的fork远端库,然后再pull request给开源的官方仓库来贡献代码。

    十五、忽略特殊文件

    0.用notepad++ 编写.gitignore文件

    1.忽略原则:操作系统自动生成的缩略图,python编译产生.pyc文件.pyo文件 .so文件 dist目录等

    # Windows:

    Thumbs.db
    ehthumbs.db
    Desktop.ini
    
    # Python:
    *.py[cod]
    *.so
    *.egg
    *.egg-info
    dist
    build
    
    # My configurations:
    db.ini
    deploy_key_rsa

    2.先单独commit 提交 .gitignore文件到git(.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!)

    git问题:提示access权限

    原因:由于电脑账号更改了密码,此密码绑定了gitlab密码。

    处理办法:直接在控制面板的用户凭据处修改git密码,修改后如果不可以,直接将凭据删除。然后重新输入用户名及邮箱,配置ssh。

    注意:一般来讲

    如果是别人的仓库,用http服务

    自己的仓库,用ssh.



     
     


     
     
  • 相关阅读:
    python新建以时间命名的目录
    selenium跳过https的问题
    selenium修改控件属性
    selenium遍历控件集合
    知识库系统confluence5.8.10 安装与破解
    python3 遍历文件
    mysql更新密码为空
    CentOS7下安装配置vncserver
    Centos7搭建php+mysql环境(整理篇)
    centos7上安装与配置Tomcat7(整理篇)
  • 原文地址:https://www.cnblogs.com/Henry-ZHAO/p/12776585.html
Copyright © 2011-2022 走看看