Git实操及学习心得

参考孟宁老师给的文档https://mp.weixin.qq.com/s/Km5KuXPETvG0wCGHrvj9Vg完成了Git的实操演练,以下是我的学习记录:

一、Git本地版本库的基本用法

想要让git对一个目录进行版本控制,需要以下步骤:

  • 进入要管理的文件夹

    新建一个git_project目录,并对该目录进行版本控制

  • 在该目录下执行初始化命令

    git init
    

​ .git文件夹是git init后在当前目录生成的一个管理git仓库的文件夹,这里包含所有git操作所需要的东西

  • 管理目录下的文件状态

    git status
    ⚠️:新增的文件和修改过后的文件都是红色
    

使用git status命令可以查看本地工作区、暂存区中文件的修改状态。由于还没在该目录下新建或者修改文件,所以会出现如上图所示的提示。

如果在该目录下新建一个文件index.html,再查看状态:

我们刚创建的 index.html文件处于Untracked (未被跟踪的状态),当前文件还没有被添加到暂存区,也就是说这个文件还没有被管理起来。

  • 管理指定文件(红变绿)

    git add 文件1 文件2 ...  添加一个或多个文件到暂存区
    git add .  添加当前目录下的所有文件到暂存区
    

  • 个人信息配置:用户名、邮箱【一次即可】

    git config --global user.email "you@example.com"
    git config --global user.name "Your Name"
    

  • 生成版本

    git commit -m '描述信息'
    

git commit将所有暂存区的修改提交到本地版本库,git状态变成了刚开始创建文件前的状态。

  • 查看版本记录

    git log
    

通过git log可以查看到生成的版本号、提交者信息、提交时间以及提示信息。

  • 修改文件,查看git状态

在空的index.html文件中填充代码,并将修改提交到暂存区再提交到本地版本库,查看git状态变化。

修改index.html,通过git diff查看修改了哪些内容,并添加到暂存区再提交到本地版本库生成新版本。

  • 回滚到之前的版本

    git log
    git reset --hard 版本号
    

    通过git log查看之前的版本提交记录

使用git reset回滚到第一次填充代码的版本。

回滚后查看index.html文件内容,可以发现功能模块3、4、5又没有了。

  • 回滚到之后的版本

    git reflog
    git reset --hard 版本号
    

    如果我们又想回滚到添加功能模块3、4、5的版本,使用git log命令无法再查到该版本的版本号,所以需要使用git reflog命令。

然后我们就能查找到我们所需要的版本号,再进行回滚。

  • 分支

    分支可以给使用者提供多个环境,意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。

  • 查看分支

    git branch
    

默认处于master主分支

  • 创建分支

    git branch 分支名称
    

新建一个dev分支

  • 切换分支

    git checkout 分支名称
    

一般线上代码是在master分支,我们开发在dev分支上进行写代码。

线上项目已经完成了功能模块1-5,接下来在dev分支上继续开发功能模块6。

完成功能模块6的开发后,提交到版本库中。

  • 分支合并(可能产生冲突)

    git merge 要合并的分支
    ⚠️:切换分支再合并
    

    先切换到master分支,再使用merge命令合并dev分支生成新的版本,如果产生冲突,需要我们手动处理。

如果在master分支给项目添加功能模块0,在dev分支给项目添加功能模块7,再将dev分支合并到master分支。

将dev分支合并到master分支后,master分支的git log出现了添加功能模块7(dev)的版本。

  • 删除分支

    git branch -d 分支名称
    

新建一个testdel分支,然后再删掉该分支。

二、Git远程版本库的基本用法

首先在GitHub上创建一个名为git_project的版本库,可以得到一个远程版本库的地址。

  • 给远程仓库起别名

    git remote add 别名 远程仓库地址
    

    为了方便使用,可以用别名替换远程仓库地址,这里用origin替换我的GitHub远程仓库地址。

  • 向远程推送代码

    git push -u 别名 分支
    

从GitHub上可以查看到已经将本地版本库的master分支push到了GitHub远程仓库,如果想要把dev分支push到远程仓库,只需把push命令后的master改为dev即可。

  • 克隆远程仓库代码

    git clone 远程仓库地址
    ⚠️:内部已实现git remote add 别名 远程仓库地址
    

    如果前面都是在家里用自己的电脑写的代码,并将其push到了GitHub上,接下来到了公司里面就需要将代码clone到公司电脑,并在此基础上继续进行开发。

从GitHub上将代码clone下来后,使用git branch查看分支显示只有master分支,其实dev分支也被clone下来了,只是没有显示出来而已,但还是可以切换。

在公司进行开发之前,因为我们主要在dev分支上进行开发,得保证dev分支与最新master分支的一致性,所以开发前先将master分支合并到dev分支。

分支合并完成后,就可以开始在dev分支上写代码了。比如新开发了a1.py,然后将此代码提交本地版本库,在下班回家之前,将此代码push到GitHub上,方便下班回家后在自己的电脑上继续开发。

回到家后,首先需要将GitHub上的代码拉到本地,然后在最新的代码版本基础上进行开发,在家开发完毕后同样push到GitHub上,第二天到了公司再从GitHub上pull。

git pull 别名 分支

三、Git Rebase(变基)三大场景应用

场景一:

​ rebase可以将多个提交记录整合成一个提交记录,让git记录更加简洁。

​ 新建一个项目pro_rebase,执行git init后,然后新建1.py、2.py、3.py、4.py并执行git add和git commit操作。

使用git log可以查看到4条提交记录,然后使用 git rebase -i HEAD~3 合并最近的3条提交记录。

为了将version_3和version_4合并到version_2,将后面两条记录的pick改为s,并修改提交信息。

整合完毕后,再使用git log查看提交记录就发现与之前不同了。

⚠️:合并记录时,最好不要合并已经push到远程仓库的记录。

场景二:

之前都是一个分支的场景,如果有多个分支,如何将其他分支的提交记录合并到master分支?

新建一个dev分支,并在dev分支下创建dev.py并执行git add和git commit操作。

同样在master分支下也新建一个master.py并进行同样的操作。

如果按之前的思路,可以在master分支下直接将dev分支merge过来。

使用 git log --graph --pretty=format:"%h %s" 简要地显示出提交记录。

为了测试使用rebase方法,我们分别在dev和master分支新添加文件dev1.py和master1.py,执行add和commit操作后,在dev分支上执行rebase命令,然后还要在master分支上执行merge命令,再查看提交记录可以发现后面没有分叉了。

场景三:

⚠️:如果git rebase产生冲突,就先解决冲突,再执行 git rebase --continue命令。

例如在master和dev分支下同时修改1.py。然后在dev分支下进行rebase,就会产生冲突。

解决完冲突后,再执行git addgit rebase --continue

posted @ 2020-10-18 16:53  Ls,  阅读(266)  评论(0编辑  收藏  举报