zoukankan      html  css  js  c++  java
  • Git基本使用

    windows安装git

    windows 下载软件包: git for windows

    安装完成之后,鼠标右键: "git"-->"Git Bash here", 会弹出命令行窗口

    在命令行输入

    $ git config --global user.name "sellsa"
    $ git config --global user.email "sellsa@qq.com"

    注意:git config命令的--global参数,表示这台机器上的所有Git仓库都会使用这个配置,当然也可以对某个参数指定不同的用户名和Email地址

    创建本地仓库

    创建一个本地仓库,只要创建一个空目录(目录名不出现中文),然后进入这个目录,在Git Bash窗口执行如下命令,就可以把这个目录变成git可以管理的仓库了

    git init

    创建完成后,这个目录下会多了一个.git的隐藏目录,它是来跟踪管理版本库的,不要手动修改这个目录的任何信息

    生成SSH Key

    在Git Bash创建下执行如下命令

    $ ssh-keygen -t rsa -C 'sellsa@qq.com'

    执行完成后会在当前用户的家目录下创建.ssh目录,该目录里面存放了私钥(id_rsa)和公钥(id_rsa.pub)

    远程仓库

    我在gitlab上已经创建了一个远程仓库demo

     

    demo项目加入成员sellsa

    sellsa登录gitlab--> 设置-->SSH密钥,把前面创建的公钥id_rsa_pub复制进来

    然后,我们就可以在Windows上使用Git bash克隆远程仓库了

    版本回退

    查看提交过得版本

    git log

    信息如下:

    commit ccc87133f8b19c6218a0074e32b8cdee66f3a821 (HEAD -> master)   #这个提交ID可用于回退
    Author: sellsa <sellsa@qq.com>
    Date:   Fri Sep 28 18:57:53 2018 +0800

    回退到上一个版本

    git reset --hard HEAD^

    回退到指定版本

    git reset --hard <commit_id>   #commit_id可以不写全,确保唯一性就行

    我们写代码的地方就是工作区,我们仓库目录下还有个隐藏的目录.git,这个目录就是版本库了,版本库又有暂存区分支

    当我们在工作区修改了代码  git add <file>  ---->会把修改存到暂存区 git commit -m 'xxxx'--->会把暂存区的修改提交到分支

    如果我们修改了文件a.py,发现有问题,需要放弃修改, 可以如下:(工作区回退)

    git checkout -- a.py

    如果我们修改了文件a.py,并且已经git add a.py,发现有问题,想要放弃修改,可以如下(暂存区回退)

    对于git rm 操作也是一样的

    #第1步:回退暂存区的修改
    git reset HEAD a.py
    
    #第2步:回退工作区的修改
    git checkout -- a.py

    修改了a.py,经过了git add a.py, 并且已经git  commit -m 'xxxx'提交到分支了,想放弃修改,可以如下(分支回退)

    #直接回退到上1个版本
    git reset --hard HEAD^

    分支管理

    创建 dev分支并切换到dev分支

    git checkout -b dev

    查看当前分支

    git branch

    切换到其他分支,如master

    git checkout master

    把dev 分支的工作成功合并到master分支

    git merge dev

    删除dev 分支

    git branch -d dev

    解决冲突

    比如我在master分支有个文件a.py, 内容如下:

    hello world...

    然后我新建了分支dev,并且把a.py修改后并提交,修改后的内容如下:

    hello world .... dev

    我又回到master 分支修改a.py的内容并提交,修改后的内容如下:

    hello world .... master

    现在如果我们直接合并,会发生冲突

    git merge dev

    这种情况下,我们就需要手动解决冲突,git status也可以告诉我们冲突的文件,

    找到冲突的文件,直接把文件内容修改成我们想要的内容,然后再提交,这样就完成合并了

    分支策略

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

    我们可以强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息

    git merge --no-ff -m "merge with no-ff" dev
    
    #因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。

    在实际开发中,我们应该按照几个基本原则进行分支管理:
    首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
    那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
    你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
    所以,团队合作的分支看起来就像这样:

    Bug分支

    在Git中,每个bug都可以新建一个临时的分支来修复,修复后合并分支,然后将临时分支删除

    当我们接到一个修复一个代号为 101的bug 的任务是,很自然的想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交

    并不是你不想提交,而是工作只进行的一半,还没法提交,预计还需要1天完成时间,但是,必须在两个小时内修复该Bug,怎么办?

    我们可以利用stash把当前工作现场程储藏起来,等以后恢复现场继续工作:

    git stash

    现在用哪个git status查看工作区就是干净的了,因此可以放心的创建分支修复bug

    git checkout master
    git checkout -b issue-101

    修复bug后提交并合并到master

    git add .
    git commit -m "fix bug 101"
    
    git checkout master
    git merge --no-ff -m "merged bug fix 101" issue-101

    现在,是时候接着回到dev分支干活了

    git checkout dev

    那么我们的之前的工作现场保存到哪去了呢,可以使用git stash list命令查看

    因为上面我们只保存过一次现场,所以只需要如下恢复现场

    git stash pop  #恢复现场,并把保存的现场删除

    如果我们有保存过多个stash,可以恢复指定的stash,用命令

    git stash apply stash@{0}
  • 相关阅读:
    反射学习(三)--------利用反射调用方法
    list实体数据分组
    利用dockerfile制作基于centos7的lnmp镜像(亲测,详细版)
    基于数组的shell脚本编写
    Ansible中文权威指南
    几种方法来实现scp拷贝时无需输入密码
    Java 中&&和&的区别
    常用javaScript小常识
    mysql数据库函数
    Hidden的应用
  • 原文地址:https://www.cnblogs.com/sellsa/p/9719379.html
Copyright © 2011-2022 走看看