五一-----GIT入门实践

用git进行版本控制

主要内容:
- 创建Git仓库
- 查看仓库的历史记录
- 向仓库中添加commit
- 标签、分支和合并
- 撤销更改

在 Windows 上配置命令提示符

  1. 下载文件(解压)

  2. 固定到快速访问

  3. 将文件放在Administor中,再使用gitbash修改文件名https://classroom.udacity.com/courses/ud123/lessons/1b369991-f1ca-4d6a-ba8f-e8318d76322f/concepts/8a5af628-7a18-49cf-bbc8-02691762f862

  1. 使用 Git 之前,你需要配置 Git。在命令行工具中运行以下每行,确保所有选项都已被配置好。

    #设置你的 Git 用户名
    git config --global user.name "<Your-Full-Name>"
    
    # 设置你的 Git 邮箱
    git config --global user.email "<your-email-address>"
    
    # 确保 Git 输出内容带有颜色标记
    git config --global color.ui auto
    
    # 对比显示原始状态
    git config --global merge.conflictstyle diff3
    
    git config --list
    
    Git 与代码编辑器
    最后一个配置步骤是让 Git 能与你的代码编辑器结合使用。以下是三个最热门的代码编辑器。如果你使用的是其他编辑器,则在 Google 中搜索“修改 Git 默认编辑器为 X 编辑器”(将 X 替换为你的代码编辑器的名称)。
    
    Atom Editor 设置
    git config --global core.editor "atom --wait"
    Sublime Text 设置
    git config --global core.editor "C:/Program Files/Sublime Text 2/sublime_text.exe' -n -w"
    VSCode 设置
    git config --global core.editor "code --wait"
    
    Linux命令
    mkdir - 用来新建目录
    rm - 用来删除文件和目录
    pwd 输出当前工作目录
    

    创建Git仓库

    仓库初始化:git init
    
    #仓库克隆:
    git clone + 链接
    例如:git clone https://github.com/udacity/course-git-blog-project
    #需要更改项目名字
    例如:git clone https://github.com/udacity/course-git-blog-project blog-project
    
    功能:
    - 会获取现有仓库的路径
    - 默认地将创建一个与被克隆的仓库名称相同的目录
    - 可以提供第二个参数,作为该目录的名称
    - 将在现有工作目录下创建一个新的仓库
    
    实用链接

    克隆现有仓库 - 中

    git 克隆文档 - 英

    git 克隆教程英

    git status
    命令将显示仓库的当前状态。
    告诉我们已在工作目录中被创建但 Git 尚未开始跟踪的新文件
    Git 正在跟踪的已修改文件
    

    查看文件的状态- 中

总结
  1. 用git init创建自己的仓库
  2. 用git clone复制现有仓库
  3. 用gitstatus来确定仓库的状态

查看仓库的历史记录

$ git log:显示仓库的commit

显示commit的包括:
                SHA
                作者
                日期
                消息

less 的重要快捷键:
    要按行向下滚动,使用 j 或 ↓
    要按行向上滚动,使用 k 或 ↑
    要按页向下滚动,使用空格键或 Page Down 按钮
    要按页向下滚动,使用 b 或 Page Up 按钮
    要退出,使用 q

    按下 q 可以退出日志(返回普通的命令提示符)
$ git log --oneline:
    每行显示一个 commit
    显示 commit 的 SHA 的前 7 个字符
    显示 commit 的消息

git log --stat:
    显示被修改的文件
    显示添加/删除的行数
    显示一个摘要,其中包含修改/删除的总文件数和总行数
git log -p:

image

    ? - 正在显示的文件
    ? - 文件第一版的哈希值和第二版的哈希值
    通常不重要,因此可以忽略
    ❤️ - 文件的旧版本和当前版本
    ? - 添加的行所在的位置以及添加了多少行
    -15,83 表示旧版本(用 - 表示)从第 15 行开始,文件有 83 行
    +15,85 表示当前版本(用 + 表示)从第 15 行开始,现在有 85 行...这 85 行显       示在下方
    ✏️ - 在 commit 中实际进行的更改
    用红色标示并以减号 (-) 开头的行是位于文件原始版本中,但是被 commit 删除的     行
    用绿色标示并以加号 (+) 开头的行是 commit 新加的行

git log -p -w:
    忽略空格更改

git show:
        显示一个commit

}

向仓库中添加commit

放到暂存区
    快速检查 git 状态:$ git status

    暂存文件 $ git add index.html

    检查 git 状态:$ git status

    不会破坏任何属于你的文件,它只是从暂存区删掉了文件。 git rm --cached 

    添加更多的文件到暂存区:$ git add css/app.css js/app.js
提交到commit
    git commit
    在代码编辑器中提供提交说明
    以 # 开头的行是注释,将不会被记录
    添加提交说明后保存文件
    关闭编辑器以进行提交
    使用git log检查提交的commit

注:在判断应该在 commit 中包含什么内容时,最好的方法是思考下“如果该 commit 中的    所有更改都清空了,会怎样?”。如果删除了某个 commit,应该只撤消一项更改。
提交说明的书写
    建议

        消息篇幅简短(少于 60 个字符)
        解释提交的作用(不是如何更改或为何更改!)

    禁忌
        请勿解释为何做出了这些更改(下文会深入讲解这一点)
        请勿解释如何进行了更改(这是 git log -p 的目的!)
        请勿使用单词"and"如果你必须使用 "and",则你的提交说明可能进行了太多的更改,将这些更改拆分为独立的commit
        例如 "make the background color pink and increase the size of the             sidebar"

git提交说明样式指南

git diff:查看已经执行但是尚未 commit 的更改

和git log用法类似

git diff详情

让git忽略某些文件
    通配符速成课程
        空白行作为空格
        # - 将行标记为注释
        * - 与 0 个或多个字符匹配
        ? - 与 1 个字符匹配
        [abc] - 与 a、b 或 c 匹配
        ** - 与嵌套目录匹配 - a/**/z 与以下项匹配
        a/z
        a/b/z
        a/b/c/z

忽略文件-中

标签、分支和合并

标签 git tag
    $ git tag -a v1.0 添加标签
    git tag 显示仓库中的所有标签
    git log --decorate  在日志输出中看到标签
    $ git tag -d v1.0 删除标签
分支 git branch
    # 列出所有分支

    $ git branch

    #切换分支

    $ git checkout sidebar

    # 创建新的"footer-fix"分支

    $ git branch footer-fix


    # 删除"footer-fix"分支

    $ git branch -d footer-fix

git 分支 - 分支的新建与合并

    #--graph 选项将条目和行添加到输出的最左侧。显示了实际的分支。--all 选项会        显示仓库中的所有分支。
    $ git log --oneline --decorate --graph --all
合并
$ git merge <other-branch>
合并有以下两种类型:
- 快进合并  要合并的分支必须位于检出分支前面。检出分支的指针将向前移动,指向另一分支所指向的同一 commit。
- 普通类型的合并 两个完全不同的分支被合并创建一个合并 commit

分支合并-中

合并冲突

当相同的行在要合并的不同分支上做出了更改时,就会出现合并冲突。git 将>在合并途中暂停,并告诉你存在冲突,以及哪些文件存在冲突。要解决文件中的冲突:
- 找到并删掉存在合并冲突指示符的所有行
- 决定保留哪些行
- 保存文件
- 暂存文件
- 提交 commit

遇到冲突时的分支合并

撤销更改

更改最后一个 commit

$ git commit –amend

向 commit 中添加忘记的文件
  • 编辑文件
  • 保存文件
  • 暂存文件
  • 运行 git commit –amend
还原commit

git revert 命令用于还原之前创建的 commit

$ git revert <SHA-of-commit-to-revert>

此命令:

  • 将撤消目标 commit 所做出的更改
  • 创建一个新的 commit 来记录这一更改

git revert 文档

重置commit

重置(reset) 似乎和 还原(revert) 相似,但它们实际上差别很大。还原会创建一个新的 commit,并还原或撤消之前的 commit。但是重置会清除 commit!

相关 commit 引用

父 commit – 以下内容表示当前 commit 的父 commit
- HEAD^
- HEAD~
- HEAD~1

祖父 commit – 以下内容表示当前 commit 的祖父 - - commit
- HEAD^^
- HEAD~2

曾祖父 commit – 以下内容表示当前 commit 的曾祖父 commit
- HEAD^^^
- HEAD~3

==注:HEAD^^^2 是 4c9749e commit(这是曾祖父的 (HEAD^^) 第二个父 commit (^2)) ==

git reset 命令

git reset 命令用来重置(清除)commit

$ git reset <reference-to-commit>

可以用来:

  • 将 HEAD 和当前分支指针移到目标 commit
  • 清除 commit
  • 将 commit 的更改移到暂存区
  • 取消暂存 commit 的更改

    1. 表示放在工作目录中

      git reset –mixed 或 git reset

      例如:

      • 9ec05ca (HEAD -> master) Revert “Set page heading to “Quests & Crusades”“
      • db7e87a Set page heading to “Quests & Crusades”
      • 796ddb0 Merge branch ‘heading-update’

      使用上面的仓库

      运行 git reset –mixed HEAD^ 会把 commit 9ec05ca 中做出的更改移至>工作目录中。

    2. 表示放在暂存区

      git reset –soft

      运行 git reset –soft HEAD^ 会把 commit 9ec05ca 中做出的更改直接移至暂存区。

    3. 放在trash里,回收站,删除

      git reset –hard

      运行 git reset –hard HEAD^ 将清除 commit 9ec05ca 中做出的更改

? 备份分支 ?

在进行任何重置操作之前,通常需要在最近的 commit 上创建一个 backup 分支,因此如果出现错误,我可以返回这些 commit

    git branch backup

Git 文档的 git-reset

CJYXDJ.png

github

使用远程仓库

添加远程仓库
  1. 在本地建立一个简单的项目,并添加内容
  2. 使用==git init==命令转变为git仓库
  3. 添加项目
  4. 使用了==git commit==提交了文件(例如:Initial commit)
  5. 在github上创建仓库
  6. 使用==git remote add origin url==本地仓库与GitHub账户上刚创建的远程仓库之间创建连接
  7. 使用git remote -v 来验证我已经正确添加了远程仓库(==git remote add== 用于添加到新的远程仓库的连接)

使用远程仓库

git remote 命令

将更改推送到远程仓库
  1. 查看 commit git log --oneline
  2. 推送 commits $ git push <remote-shortname> <branch>

    例如:$ git push origin master

  3. 检查本地仓库 $ git log --oneline --graph --decorate --all
从远程仓库拉取修改【git fetch获得远程后不合并,git pull 要合并】

当本地仓库和远程仓库都有对方没有的commit使用git fetch

  $ git pull origin master

在运行 git pull 时,会发生以下活动:

远程分支上的 commit 会被复制到本地仓库

本地跟踪分支(origin/master)移到指向最新的 commit

本地跟踪分支(origin/master)合并到本地分支(master)

  $ git fetch origin master

1. 远程分支上的 commit 会复制到本地仓库
2. 本地跟踪分支(例如,origin/master)移到指向最新的 commit
3. 而且本地分支完全不会被改变

使用其他开发者的仓库

使用fork仓库,在github上点击fork复制别人的仓库
查看现有工作

看到每位贡献者在此仓库中添加了多少 commit,显示了按字母顺序排序的人名列表,以及他们对应的提交说明

  $ git shortlog

看每个开发者的 commit 数量,并按数量排名

  $ git shortlog -s -n

显示某个作者所有 commit

  $ git log --author=Surma

我们想看到 Paul Lewis 的 commit(注意引号)

  $ git log --author="Paul Lewis"
按搜索内容筛选 commit

使用 –grep 选项筛选 commit

  $ git log --grep=bug
  $ git log --grep bug[中间有空格]
PULL request

Pull Request的步骤:

  1. 将他人的仓库Fork成自己的仓库(访问该仓库页>面,点击fork)
  2. 将自己的仓库clone到本地(git clone 自己仓库的URL)
  3. 创建特性分支(在GitHub上发送Pull Request时,一般都是发送特性分支。这样一来,Pull Request就拥有了更明确的特性[主题],让对方了解自己修改代码的意图,有助于提高代码的审查效率)
  4. 做出自己需要的修改
  5. 提交修改(git add… & git commit -m “…”)
  6. 创建远程分支(要从GitHub发送Pull Request,GitHub端的仓库中必须有一个包含了修改后代码的分支。git push origin 远程分支名)
  7. 发送Pull Request(登陆GitHub,切换到相应分支,点击Compare可查看分支之间的差别。点击New Pull Request,在随后显示的表单中填写本次进行Pull Request的理由,并提交即可)
与源项目保持同步

upstream 作为引用源仓库的简写名

   $ git remote add upstream https://github.com/udacity/course-collaboration-travel-plans.git

git remote add origin url origin指我们 fork 后的仓库

获得上游远程仓库的更改:$ git pull upstream master

要向 Lam 的仓库推送这些新更改

$ git checkout master


# 合并 Lam 的更改

$ git merge upstream/master


# 将 Lam 的更改发送到*我的*远程仓库

$ git push origin master
要将源仓库的更改提取到你在 GitHub 上 fork 的仓库副本,你需要:
  • 获得源仓库的可克隆 URL

  • 使用 git remote add 命令创建一个新的远程仓库

  • 使用简写名 upstream 指向源仓库

  • 提供源仓库的 URL

  • 获取新的 upstream 远程仓库

  • 将 upstream 的分支合并到本地分支

  • 将新更新的本地分支推送到你的 origin 仓库

管理活跃PR
压制commit

git rebase

git push -f 强制推送这些 commit

git rebase -i HEAD~3

压制commit

git rebase-英

CJwrNj.md.png

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值