zoukankan      html  css  js  c++  java
  • Git工具学习整理

    注:本文整理自 廖雪峰git学习文档

    创建版本库:

    1、新建空目录;2、git init 把这个目录变成Git可以管理的仓库:

    git只能跟踪文本类文件变化,不能管理跟踪二进制类

    千万不要使用记事本编辑代码,建议使用UTF-8 without BOM的notpad++

    【git add -- file】将文件从工作区添加到暂存区;

    【git status】查看暂存区内容

    【git commit -m ""】将暂存区内容提交到本地仓库,纳入版本管理中


    版本回溯

    【git diff filename】查看文件修改内容(与当前head版本比)

    【git log】显示从最近到最远的提交日志(被commit了才会被管理,才会被显示)     -》 git log --pretty==oneline  优化显示在一行

    git中,使用HEAD表示最新版本,则上一个版本是 HEAD^,上上一个版本就是 HEAD^^,。。往上100个版本就是 HEAD~100; 若要回退到某个版本使用 git reset --hard HEAD^

    【git reset --hard commit_id】

    使用reset回退之后,再次 git log 则不会显示之后的新版本了,如本来今天在head版本,回退到昨天的head^之后,再次git log,则不会显示今天的原head版

    git log 显示出的信息会有具体的版本号(十六位的一大串SHA计算出的数字,就是这里的commit_id),只要能找到这个版本号,哪怕已经reset老版本了,也可以使用 git reset --hard commit_id又回到“未来”。。 

    如果版本号是在找不到了,使用 git reflog 会显示所有时间线上 的log标记,,就可以找到commit_id了。。。

     【工作区 working directory】.git 文件所在的目录区

    暂存区 stage】git add后修改临时存放的地方,表示可以准备提交到本地版本库了,git status可以查看暂存区内容

    【本地版本库】.git内的内容,包含了stage和commit后的内容

    【git add  -->  git commit -m ""  -->  git push】,中间随时可以 git status 查看暂存区内容


     修改管理

    git commit只会提交暂存区的内容;若本地修改没有add到暂存区中,则不会被提交

    【git chekout -- file】丢弃工作区修改

    【git reset HEAD file】清空暂存区某file文件,相当于 unstage (git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本)

    场景一:若本地修改了,但还未add到暂存区中,想要丢弃工作区修改,直接 git checkout -- file 即可

    场景二:若本地修改了,且已经add到了暂存区中,还没commit,需要 先 git reset HEAD file 清空unstage暂存区,再 git checkout -- file 丢弃工作区修改即可

    场景三:若修改已经commit了,版本库已经控制了,想要回退,直接 git reset commit_id 即可(版本回退)

    【git rm file】将文件删除操作 添加到暂存区

    场景一:确实需要删除某文件并提交到版本库,则 首先手动删除文件,再 git add/rm file 提交到暂存,再 git commit 提交到版本库即可(此时 add 和 rm 命令效果一致)

    场景二:手动误删了文件,想要恢复。因为虽然工作区删掉了,但是版本库中还有,因此直接 git checkout -- file 即可(其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”)


    远程仓库

    【生成SSH key】ssh-keygen -t rsa -C "some@example.com"

    这样会在用户主目录下 生成 .ssh 目录,内有 id_rsa 和 id_rsa.pub 两个文件,分别是私钥和公钥,将公钥添加到 github的账户中,就可以向github这个账户推送内容了;一个github账户可以存多个ssh key,即多方不同 都向中央仓库推送代码

     新建好github远程仓库,需要和本地仓库做关联:

    【git remote add origin git@server-name:sskk.git】在本地添加远程仓库(git remote 表示远程相关操作,add添加远程仓库操作,origin 远程仓库的名称(git默认的,也可以命名为别的名字,但推荐这个),git@server-name:sskk.git 具体的远程仓库的git地址)

    【git push -u origin master】本地推送到远程仓库origin的master分支上(-u表示 set-upstream,即全部索引提交;origin master 远程origin的master分支,master默认的主干名)

    git clone git@server-name:sskk.git】直接在本地克隆一个远程仓库,直接就建立了关联


    分支管理

    git中的分支管理可以使用指针概念理解:

    各个操作log组成一条时间线,假设是在master分支上,则有master指针指向最新提交,而HEAD指针指向master;若新建分支dev,则相当于新建指针指向master对应的最新提交,而切换分支到dev,相当于直接将HEAD指针指向了dev指针,所以很快;

    若此时在dev分支上作修改,相当于log时间线继续向前进,而dev指针继续指向最新,但是master指针却不动;切换到master分支,则相当于HEAD又指向了原master位置,工作区文件显示相应回退到master状态

    执行merge,则相当于直接将master指针指向了div所指位置,完成了合并

    【git branch】        查看各分支,当前分支以 * 号标记

    【git branch <name>】    创建 name 分支,并未切换

    【git checkout <name>】    切换到 name 分支

    【git checkout -b <name>】  创建 + 切换分支

    【git merge <name>】    合并某分支到当前分支

    【git branch -d <name>】    删除 name分支

    -----------

    若在master分支最新HEAD时,新建分支feature1,在feature1上对文件做了修改,切回到master,此时直接对master分支的文件也做了修改,这时就相当于log时间先有了分叉,分别是master分支方向和feature1分支方向,这时若要合并,则需要解决冲突,不能简单的将master指针移动就可以了

    处理冲突的一般过程

    1、合并分支到当前,git merge feature1,产生了冲突

    2、手动打开文件,处理解决冲突(<<<<<<< HEAD 之后的表示当前分支的内容, ======= 表示两分支代码的分割, >>>>>>> feature1之前的 表示feature1分支的代码内容),需要手动清理写入自己想要的目标代码,然后保存即可(表示resolved)

    3、重新 add,commit 提交文件,即表示处理了冲突且合并了代码

    git log --graph --pretty=oneline --abbrev-commit 图像化的看到分支合并历史

    注:此时只是master分支有log合并历史,在feature1分支上没有任何改变

    git merge --no-ff -m "commit log" <brach_others>】强制禁用Fast forward模式完成合并分支(这种模式推荐,因为 合并后的历史有分支,能看出来曾经做过的合并,而fast forward合并就看不出来曾经做过合并)

    -----------------

    分支策略

    1、master 分支(主干)应该持续稳定,仅用来发布新版本,平时不能用于写代码

    2、干活都在出来的dev分支;你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

    3、修改bug策略:每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除,具体:-》

    =》3.1、git stash  将当前工作区修改储藏起来,等待以后恢复(git stash之后,工作去就是干净的)

    =》3.2、git checkout master   返回主干

    =》3.3、git checkout -b issue-101  基于主干拉出分支专门处理bug

    =》3.4、处理完bug,add->commit 在issue-101分支上提交修改

    =》3.5、git checkout master  切回主干准备合并分支

    =》3.6、git merge --no-ff -m "merged bug fix 101" issue-101  进行合并

    =》3.7、git branch -d issue-101  删除临时修改的分支

    =》3.8、git checkout dev    切回之前的开发分支

    =》3.9、git stash pop      回复之前的工作区修改

    【git stash】将当前工作区修改存档起来(不是提交也不是放到stage中),后面还可以在取出来

    【git stash list】查看stash中的多个存档

    【git stash apply】将stash中存档恢复,但是stash区域不被删除

    【git stash drop】手动将stash区域删除,配和stash apply使用

    【git stash pop】将stash中存档恢复,同时删除存档

    ---------------------

    如果一个新分支,做了修改,但并没有被合并到主干就需要被delete,这时git会提示,需要使用 -D 命令才可以删除,git branch -D <feature-name>


    多人协作

    • 查看远程库信息,使用git remote -v

    • 本地新建的分支如果不推送到远程,对其他人就是不可见的;

    • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;

    • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

    • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name

    • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

  • 相关阅读:
    HTML5 drag拖动事件
    echarts 实现立体柱子图
    团队管理(七)
    echarts环比图实现
    父组件调用图表组件根据按钮切换展示数据
    echarts 折柱图绘制图表标注
    团队管理(六)
    团队管理(五)
    css 绘制圆角三角形
    团队管理(四)
  • 原文地址:https://www.cnblogs.com/alison-lxj/p/11156055.html
Copyright © 2011-2022 走看看