美文网首页
Git 版本控制学习

Git 版本控制学习

作者: 前端一枚渣渣 | 来源:发表于2019-07-12 17:38 被阅读0次

    git 简介

    • git 是由 C 语言编写的分布式版本控制系统
    • 集中式版本控制系统: CVSSVN
      • 定义:先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器

    git 安装

    1. Linux 上安装 Git
      DebianUbuntu Linux 使用 sudo apt-get install git 指令即可安装
    2. Mac OS X 上安装 Git
    • 方法一:安装 homebrew ,然后通过 homebrew 安装 Git ,具体方法请参考 homebrew 的文档:http://brew.sh/
    • 方法二:从 AppStore 安装 XcodeXcode 集成了 Git, 不过默认没有安装,你需要运行 Xcode ,选择菜单 Xcode -> Preferences ,在弹出窗口中找到 Downloads ,选择 Command Line Tools ,点 Install 就可以完成安装了

    创建版本库

    1. 创建空目录: mkdir demo
    2. 初始化为 Git 可以管理的仓库: git init
    3. 将文件添加到版本库中
    • 首先在目录中创建一个文件 touch Readme.md
    • 然后将文件添加到仓库 git add Readme.md
    • 将文件提交到仓库 git commit -m "info"

    版本管理

    1. 查看历史版本 git log
    • 觉得 git log 输出太多行,可执行 git log --pretty=oneline
    • 输出的大串字符为 commit id
    1. 版本回退 git reset
    • 回退到上一个版本 git reset --hard HEAD^
    • 查看回退后的文件 cat Readme.md
    • 此时执行 git log 可以看到少了最新的版本状态
    1. 找到回退前的最新版本
    • 命令行窗口未关闭:往上翻阅,直到找到最新的版本的 commit id ,执行命令 git reset --head **** 即可找回
    • 命令行窗口关闭: git reflog 可以查看自己的每一次命令,从输出得知最新的版本的 commit id
    1. 工作区和暂存区
    • 工作区有一个隐藏目录 .git , 是 Git 的版本库
    • Git 的版本库里存了很多东西,其中最重要的就是称为 stage (或者叫 index )的暂存区
    • Git 为我们自动创建的第一个分支 master ,以及指向 master 的一个指针叫 HEAD
    1. 管理修改
    • 执行操作:第一次修改 Readme.md -> git add -> 第二次修改 Readme.md -> git commit
    • 提示不能被提交,因为工作区的第二次修改并没有被放入暂存区, git commit 只能提交暂存区的修改,所以第二次的修改不会被提交
    • 提交后,可以执行 git diff HEAD -- Readme.md 命令可以查看工作区和版本库里面最新版本的区别
    • 正确做法:执行操作:第一次修改 Readme.md -> git add -> 第二次修改 Readme.md -> git add -> git commit
    1. 撤销修改
    • 对文件撤销修改: git checkout -- file
    • 首先,对错误的代码更改,然后将文件恢复到上一个版本的状态
    • 通过 git status 查看
    • 提示通过 git checkout -- Readme.md 可以丢弃工作区的修改
    1. 删除文件
    • 方法一: rm Readme.md ,此时工作区和版本库就不一致了, git status 命令会立刻告诉你哪些文件被删除
    • 方法二: git rm Readme.md ,此方法为从版本库中删除文件,然后通过 git commit -m "删除Readme.md" 提交

    远程仓库

    1. 添加远程仓库
    • GitHub 新建一个 Git
    • 本地目录中执行 git remote add origin git@github.com:yourName/demo.git
    • 将本地库的内容推送到远程库中 git push -u origin master
    • 把本地库的内容推送到远程,用 git push 命令,实际上是把当前分支 master 推送到远程
    • 由于远程库是空的,第一次推送 master 分支时,加上了 -u 参数, Git 不但会把本地的 master 分支内容推送的远程新的 master 分支,还会把本地的 master 分支和远程的 master 分支关联起来,在以后的推送或者拉取时就可以简化命令
    1. 从远程库克隆
    • git clone git@github.com:yourName/demo.git

    分支管理

    1. 创建、合并与删除分支
    • 创建 dev 分支,并切换到 dev 分支: git checkout -b dev ( -b 参数表示创建并切换)
    • git branch 命令查看当前分支,当前分支前面会标一个 *
    • 此时修改 Readme.md 文件并提交: git add Readme.mdgit commit -m "info"
    • 此时切换回 master 主分支: git checkout master
    • dev 分支的工作成果合并到 master 分支上: git merge dev
    • git merge 命令用于合并指定分支到当前分支
    • 合并完成后,可以放心地删除 dev 分支: git branch -d dev
    • 删除后,查看 branch ,就只剩下 master 分支: git branch
    1. 解决冲突
    • 创建 dev1 分支,并切换到 dev1 分支: git checkout -b dev1
    • 修改 Readme.md 文件并提交: git add Readme.mdgit commit -m "info"
    • 切换回 master 主分支: git checkout master
    • Git 会自动提示我们当前 master 分支比远程的 master 分支要超前1个提交
    • 修改 Readme.md 文件并提交: git add Readme.mdgit commit -m "info"
    • 此时: master 分支和 dev1 分支各自都分别有新的提交, Git 无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突
    • 尝试: git merge dev1Git 告诉我们, Readme.md 文件存在冲突,必须手动解决冲突后再提交, git status 也可以告诉我们冲突的文件
    • Git<<<<<<<,=======,>>>>>>> 标记出不同分支的内容,修改后保存: git add Readme.mdgit commit -m "info"
    • 用带参数的 git log 也可以看到分支的合并情况
    • 删除 dev1 分支: git branch -d dev1
    • git log --graph 命令可以看到分支合并图
    1. 分支管理策略
    • 合并分支时,如果 GitFast forward 模式,删除分支后,会丢掉分支信息;如果要强制禁用 Fast forward 模式, Git 就会在 merge 时生成一个新的 commit ,这样,从分支历史上就可以看出分支信息
    • 首先,仍然创建并切换 dev 分支:git checkout -b dev
    • 修改 Readme.md 文件并提交一个新的 commitgit add Readme.mdgit commit -m "info"
    • 切换回 mastergit checkout master
    • 准备合并 dev 分支,请注意 --no-ff 参数,表示禁用 Fast forwardgit merge --no-ff -m "merge with no-ff" dev
    • 合并后,我们用 git log 看看分支历史: git log --graph --pretty=oneline --abbrev-commit
    1. Bug 分支
    • 将未提交的代码通过 git stash 将当前工作现场“存储”起来: git stash
    • git status 查看工作区,是干净的,可以放心地创建分支来修复bug
    • 确定要在哪个分支上修复 bug ,假定在 master 分支上修复,创建临时分支: git checkout mastergit checkout -b issue-101
    • 现在修复 bug ,然后提交: git add Readme.mdgit commit -m "info"
    • 修复完成后,切换到 master 分支,并完成合并: git checkout master
    • 最后删除 issue-101 分支: git merge --no-ff -m "merged bug fix 101" issue-101
    • 回到dev分支干活: git checkout dev
    • git stash list 命令看刚才的工作现场存在哪
    • 工作现场还在, Gitstash 内容存在某个地方了,但是需要恢复一下,有两个办法:
      • 一是用 git stash apply 恢复,但是恢复后, stash 内容并不删除,你需要用 git stash drop 来删除
      • 二是用 git stash pop ,恢复的同时把 stash 内容也删了
    • 再用 git stash list 命令就看不到任何stash内容了
    • 可以多次 stash ,恢复的时候,先用 git stash list 查看,然后恢复指定的 stash ,用命令: git stash apply stash@{0}
    1. Feature 分支
    • 添加一个新功能时,新建一个feature分支: git checkout -b feature-vulcan
    • 开发成功后提交 : git add Readme.mdgit commit -m "info"
    • 切换 dev 分支,准备合并:git checkout dev
    • 如果客户脑子瓦特,又不要新功能了,删除新分支(丢弃一个没有被合并过的分支): git branch -D feature-vulcan
    1. 多人协作
    • 查看远程库的详细信息: git remote -v
    • 推送分支:把该分支上的所有本地提交推送到远程库
      • 推送时,要指定本地分支,这样, Git 就会把该分支推送到远程库对应的远程分支上: git push origin master
      • 如果要推送其他分支,比如 dev ,就改成: git push origin dev
    • 抓取分支:多人协作时,大家都会往 masterdev 分支上推送各自的修改
      • 如果推送失败,则因为远程分支比你的本地更新,需要先用 git pull 试图合并
      • 如果合并有冲突,则解决冲突,并在本地提交
      • 没有冲突或者解决掉冲突后,再用 git push origin <branch-name> 推送就能成功
      • 如果 git pull 提示 no tracking information ,则说明本地分支和远程分支的链接关系没有创建,用命令 git branch --set-upstream-to <branch-name> origin/<branch-name>
    • 在本地创建和远程分支对应的分支,使用 git checkout -b branch-name origin/branch-name ,本地和远程分支的名称最好一致,如 git checkout -b dev origin/dev
    • 建立本地分支和远程分支的关联,使用 git branch --set-upstream branch-name origin/branch-name,如 git branch --set-upstream-to=origin/dev dev
    1. Rebase
    • git log 命令查看: git log --graph --pretty=oneline --abbrev-commit
    • 提交历史分叉时,如果现在把本地分支 push 到远程,历史不能变成直线
    • 使用 git rebase 后提交,再用 git log --graph --pretty=oneline --abbrev-commit 查看,变成了一条直线

    标签管理

    1. 创建标签
    • 在Git中打标签非常简单,首先,切换到需要打标签的分支上: git checkout master
    • 敲命令 git tag <name> 就可以打一个新标签
    • 可以用命令 git tag 查看所有标签,默认标签是打在最新提交的 commit 上的
    • 如果忘记打标签,找到历史提交的 commit id ,然后打上就可以了: git tag v0.9 f52c633
    • 再用命令 git tag 查看,标签不是按时间顺序列出,而是按字母排序的。可以用 git show <tagname> 查看标签信息: git show v0.9
    • 还可以创建带有说明的标签,用 -a 指定标签名, -m 指定说明文字: git tag -a v0.1 -m "version 0.1 released" 1094adb
    • 用命令 git show <tagname> 可以看到说明文字
    1. 操作标签
    • 如果标签打错了,也可以删除: git tag -d v0.1
    • 因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除
    • 如果要推送某个标签到远程,使用命令 git push origin <tagname>
    • 一次性推送全部尚未推送到远程的本地标签: git push origin --tags
    • 如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除: git tag -d v0.9
    • 然后,从远程删除。删除命令也是 push ,但是格式如下: git push origin :refs/tags/v0.9
    • 要看看是否真的从远程库删除了标签,可以登陆 GitHub 查看

    注:笔记为学习廖雪峰老师的官网:官网

    相关文章

      网友评论

          本文标题:Git 版本控制学习

          本文链接:https://www.haomeiwen.com/subject/jpmykctx.html