• git使用手册


    一、安装git
    运行git bash
    二、创建版本库(仓库)reposity,并提交文件
     
    #新建文件夹
    mkdir learngit
    cd learngit
    #显示当前目录
    pwd
    #将目录变为git仓库,生成 .git 文件(git用来跟踪管理版本库)
    git init
    #显示文件夹中所有文件(包括隐藏文件)
    ls -ah
    #将文件添加到git仓库,支持一次添加多个文件
    git add reademe.txt
    #将文件提交到仓库,支持多次添加,最后统一提交
    git commit -m "create reademe.txt"
     
    git commit命令中,-m后面输入的是本次提交的说明,方便查阅。
     
    三、修改文件
    修改文件后:
     
    #查看仓库状态,modified会告知那些文件修改了
    git status
    #查看修改内容
    git diff
    #添加
    git add reademe.txt
    #可以再次查看仓库状态
    git status
    #提交
    git commit -m "change file"
    #再次查看仓库状态,此时为 nothing to commit
     
    四、时光机穿梭
    1、版本回退
     
     #显示从最近到最远的提交日志
    git log
    #已版本号的方式显示提交日志
    git log --pretty=oneline
    #回退到上一个版本
    git reset --hard HEAD^
    #回退到某一个版本(版本号可以不写完整)
    git reset --hard 3628164
    #查看历史命令,以便回到过去版本后再恢复到未来的某个版本
    git reflog
     
    HEAD表示当前版本
    HEAD^表示上一个版本
    HEAD^^表示上上个版本
    HEAD~100 表示第几个版本
     
    2、工作区和暂存区
    ①工作区:电脑中能看到的目录。
    ②版本库:工作区中有一个隐藏的目录 .git,这个不算是工作区,而是git的版本库。
    ③暂存区:又称state,存在于版本库中。
    ④分支:存在于版本库中,git会默认创建一个master分支。
    ⑤指针:又称HEAD,存在于版本库中,默认指向master分支。
     
    git add命令就是将文件添加到暂存区,git commit就是将暂存区的所有文件,一次提交到HEAD指向的分支上。因此,文件修改必须先add到暂存区,再commit到仓库。
    git add 和 git commit是将修改分别同步到暂存区和仓库,并不会将暂存区的内容清除。
    如果一个文件未曾被添加到暂存区过,则git status查看仓库状态时,此文件为 untracked。
     
    #对比工作区和暂存区的不同
    git diff
    #对比暂存区和分支的不同
    git diff --cached
     
    3、撤销修改
     
    #将文件回退到最近一次git commit 或git add时的状态
    git checkout -- reademe.txt
    -- file 很重要,如果没有就变成了另一个“切换到另一个分支”的命令。
     
    4、删除文件
     
    #删除本地文件
    rm test.txt
    #从版本库恢复删除文件
    git checkout -- test.txt
    #从版本库删除
    git rm test.txt
     
    无论是修改还是删除,git checkout 其实是用版本库中的版本替换工作区的版本。
     
    五、分支管理
    1、分支操作
     
    #查看分支,其中带*为当前分支
    git branch
    #创建分支,创建的分支与当前分支内容一致
    git branch <name>
    #切换分支
    git checkout <name>
    #创建+切换分支
    git checkout -b <name>
    #合并某分支到当前分支
    git merge <name>
    #删除分支
    git branch -d <name>
    #查看分支合并图
    git log --graph
     
    HEAD永远指向当前分支,合并分支实际是将当前分支指向要合并的分支的指向。
    当git无法自动合并分支时,必须先解决冲突。冲突解决后,再提交,合并完成。
     
    2、分支合并模式
    Fast forward模式:通常合并分支时,如果可能,git会用Fast forward模式,这种模式下,删除分支,会丢掉分支信息。
    普通模式:用--no-ff 禁用Fast forward模式,git会在merge时生成一个新的commit,这样从分支历史上就能看到分支的信息。
     
    #合并分支,并创建一个新的commit,所有用-m参数,添加版本描述
    git merge --no-ff -m "merge with no-ff" dev
    #查看分支历史
    git log
    3、分支策略
    master分支:应该是非常稳定的,也就是仅用来发布新版本,平时不能在此分支开发。
    dev分支:用于平时开发,是不稳定的,等到发布新版本时,再合并到master上。
    每个开发者都在dev分支进行开发,那每个人都有自己的分支,再时不时的往dev上合并即可。
    4、bug分支
    举个栗子:
    如果在master分支上有一个代号为101的bug,但是你在dev分支上的开发还没有完成,不能提交。那如何完成bug修改,并且不影响现有开发?
    第一步:保存工作现场
    #把当前工作现场“储藏”起来,等以后恢复现场后继续工作
    git stash
    #stash后,git status查看工作区就是干净的,可以放心的创建分支
    git status
     
    第二步:修改bug
    #确定在哪个分支上修复bug,即切换到哪个分支
    git checkout master
    #从 master分支创建临时分支,并切换
    git checkout -b "issue-101"
    #修复完成后,提交,此时提交到issue-101分支
    git add reademe.txt
    git commit -m "fix bug 101"
    #测试端bug验证完后,切换到master分支,完成合并删除issue-101
    git checkout master
    git merge -no-ff -m "merged bug fix 101" issue-101
    git branch -d issue-101
     
    第三步:恢复现场
    #修改完bug了,现在恢复dev的工作区
    git checkout dev
    #此时工作区还是干净的
    git status
    #查看stash list 工作现场的保存
    git stash list
    #两种恢复工作现场方法
    #第一:恢复后,stash内容不删除,再手动删除
    git stash apply
    #删除stash内容
    git stash drop
    #第二种:恢复的同时,删除stash内容
    git stash pop
     
    切换分支及创建分支时,要保证工作区的状态是干净的,即都当前修改均已提交到git仓库。因为,切换分支后,未提交仓库的修改将不被保留。
     
    5、feature分支
    feature:开发中用于开发新功能的分支。
     
    #新建分支
    git checkout -b feature-1
    #开发完毕后,提交
    git add reademe.txt
    git commit -m "add feature-1"
    #合并到dev分支
    git checkout dev
    git merge --no-ff -m "fix feature-1" feature-1
    #若开发过程中,新功能取消,删除未合并的分支
    git branch -D feature-1
     
    6、多人协作
     
    #查看远程库信息,远程库的名称默认origin
    git remote
    #远程库更详细信息,抓取和推送的远程地址
    git remote -v
    #推送分支,指定本地分支,会将该分支所有本地提交到远程库对应分支上
    git push origin master
     
    master:主分支,要时刻与远程同步
    dev:开发分支,团队所有成员都需在上面工作,所以需要远程同步
    bug:只用于本地修复bug,没必要推到远程
    feature:是否推到远程,取决于你是否与你的小伙伴合作开发
     
    #抓取分支
    #克隆
    git clone git@github.com:michaelliao/learngit.git
    #从远程库clone时,只能看到本地的master分支
    #查看分支
    git branch
    #想要在dev分支开发,必须创建远程origin的dev分支到本地
    git checkout -b dev origin/dev
    #开发工程中是不是把dev分支push到远程
    git add reademe.txt
    git commit -m "add"
    git push origin dev
    #如果同时修改同一文件,push失败,就要先pull
    git pull
    #如果pull失败,原因为没有指定本地dev与远程origin/dev的链接,“no tracking information”
    git branch --set-upstream dev origin/dev
    #再pull
    git pull
    #解决完冲突,再提交,上传
     
    六、标签管理
    标签:发布一个版本是,通常在版本库中打一个标签tag,其实是指向某个commit的指针,(分支也是指向commit的指针,但是分支可以移动,标签不能),标签跟某个commit绑定在一起,为了方便查找某个固定的版本,如使用标签tag v1.2 ,而不是使用某个commit 6a5819e。
    1、创建标签
     
    #切换到需要打标签的分支
    git checkout master
    #打一个新标签,默认标签是打在最近的commit上
    git tag v1.0
    #对历史commit,打标签
    git tag v0.9 6224937
    #查看所有标签,标签按字母排序
    git tag
    #查看标签详情
    git show v0.9
    #创建带有说明的标签,-a指定标签名,-m指定说明
    git tag -a v0.1 -m "version 0.1 released" 32534344
     
    2、操作标签
    #删除标签
    git tag -d v0.1
    #推送标签到远程
    git push origin v1.0
    #一次性推送全部尚未推送到远程的本地标签
    git push origin --tags
    #如果删除推送到远程的标签
    #先删除本地标签
    git tag -d v0.9
    #再删除远程标签
    git push origin :refs/tags/v0.9
     
    七、自定义git
    1、.gitignore文件
    添加忽略文件
     
    2、配置别名
    例如: --global 是全局参数,也就是这些命令可以在这台电脑的所有git仓库下应用
     
    #git status -> git st
    git config --global alias.st status
    git config --global alias.co checkout
    git config --global alias.ci commit
    git config --global alias.br branch
    #git reset HEAD file将暂存区的修改撤销,即unstage,相当于将工作区将文件git add的这边操作撤回,工作区仍保持不变
    git config --global alias.unstage 'reset HEAD'
    #使用别名
    git unstage test.txt
    #显示最后一次提交信息
    git config --global alias.last 'log -1'
    #使用不同颜色显示log信息
    git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
     
    每个仓库的配置都放在 .git/config 文件中,别名再【alias】后面,如果要删除别名,直接把对应的行删掉即可。
     
     
     
     
     
     
  • 相关阅读:
    NIOS II常用函数整理
    C指针
    YCbCrYUV
    指针与引用的区别
    Pacman 命令详解
    DDR工作原理
    关于C/C++中的点操作符和箭头操作符
    千兆以太网芯片88E1111 RGMII模式的驱动
    关于建立时间和保持时间
    ECE 576 UDP Hardware
  • 原文地址:https://www.cnblogs.com/zuozuo-blog/p/6567524.html
Copyright © 2020-2023  润新知