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 add和git rebase --continue。