Git学习笔记精简版

Git学习笔记-廖雪峰教程学习@[三川水祭]
仅作学习交流使用,将来的你会感谢现在拼命努力的自己!!!

它是什么

Git是分布式版本控制系统,那么什么是分布式的版本控制系统呢,可以这样理解:每个人在本地电脑上都有一个将要编辑的版本库,包含从初始到当前的代码的各个版本,如何进行协作呢?在仅使用master的情况下,新建立一个Git版本服务器,每个员工从服务器拉取最新版本,之后程序员之间商量每个人处理哪个部分,在本地对代码进行修改,完成后从服务器拉取最新代码版本,进而提交自己对代码的修改。详情参考博客园博文:https://www.cnblogs.com/onelikeone/p/6857910.html。

Git主要架构

Git主要包括工作区与版本库两部分,工作区就是对文件代码进行修改的地方,而版本库则是.git目录下存放的东西。主要的架构如图1:
图1

怎么安装

sudo apt-get install git (仅针对ubuntu系统)其他自行百度
git config --global user.name “Your Name” 将Your Name改成你主机名字
git config --global user.email "[email protected]" 将邮箱改成你自己的

怎么初始化

新建一个空白的地准备开始搞Git:mkdir learngit
初始化一个对空白目录进行初始化(以后就在这里编辑了):
进入当前目录下:cd learngit
初始化目录:git init

开始使用

首先将代码文件readme.txt放入learngit文件夹中,将该文件加入Git版本仓库中:git add readme.txt,注意可多次添加。
之后就是将上述所有修改的代码加上注释并提交:git commit -m “something you want to say”。

进行调试

接下来进行代码的编辑,使用git status查看当前仓库的状态,如果文件发生了修改,使用git diff查看到底那里进行了改动。修改完成后使用git add readme.txt将修改后的文件放入Git版本库中,并通过git commit -m “something”来描述进行的更改。
进行回顾:
要看我们之前在何处进行了更改,肯定不能自己一个一个记忆,此时git的一个命令就是完成该任务的:git log --pretty=oneline,可以查看历史中各个版本的修改以及提交的修改的内容。

版本跳跃

Git是使用head指向各版本的id标识符,通过对head的指向更改当前版本,如图2。
首先使用git log --pretty=oneline完成版本id查看.
之后使用git reset --hard commit_id进行版本的跳转,要想直接跳往上一版本的话,直接输入git reset –hard HEAD^即可,上4个版本,输入git reset –hard HEAD~4即可。要是后悔跳往上一版本的话咋整,输入git reflog即可完成完成版本号的查看,进而完成版本的跳转。旋转、跳跃、我闭着眼。。。
版本跳跃示意图

Git修改文件

Git需要将修改后的文件提交到暂存区后才可以提交。完整的修改命令如下:
第一次修改 -> git add -> 第二次修改 -> git add -> git commit

Git撤销修改

当自己修改后准备提交,发现我的天哪,有个错误,咋整?别急,使用 “git checkout – …” 丢弃工作区的改动,会回到最初更改的状态。
要是已经提交到暂存区了,咋整?先使用 “git reset HEAD …” 撤出暂存区,之后使用"git checkout – …" 丢弃工作区的改动。
要是已经上传到本地的master上了,咋整?直接使用git reset --hard commit_id进行版本的跳转。
要是推送到远程,咋整?准备好辞职信,然后明天递交。

Git文件的删除

要想删除一个文件咋整,可以先在本地删除文件,然后输入命令:git rm filename。
要是删错了,还没提交,咋整?输入命令git checkout – test.txt同步版本库到本地。
要是删错了,还提交到本地库中,咋整?通过git reset --hard commit_id进行版本跳转,然后输入命令git checkout – test.txt同步版本库到本地中。

Git杀手级工具----github

  1. 注册github;
  2. 在本地家目录下.ssh目录中生成id_rsa(私钥)和id_rsa.pub(公钥)两个文件。通过命令ssh-keygen -t rsa -C "[email protected]",然后一直回车就好。邮箱记得改成自己的。接下来在github账号上的账户设置中点开SSH and GPG keys,点击new_ssh_key,添加本机的id_rsa.pub。应用就好。主要Github上面不要放啥敏感信息,因为内容是公开的。
  3. 在github上创建新的repositories,名字写为learngit,其余保持默认。如图3。
    github上生成新库的流程图
  4. 之后会生成如图4。输入圈内的代码便可以从本地推送git版本库到github上了,这是每天晚上都需要做的事情。当然了,想使用ssh协议的也可以点击上述SSH按钮,就会生成相应的推送代码。首次输入push时候需要输入用户名与密码,如图5。
    生成版本库后自带源码图
    Github上此时就可以看到在版本库中的最新信息,清晰明了。当没有网络时候,本机使用自身的版本库进行编辑,完全无压力,当有网络时,同步到github上,并拉取到本地即可。
    首次推送的命令图
  5. 从远程克隆文件到本地,这是每天早上都需要做的事情。从命令行输入git clone [email protected]:zht012323/gitskill.git。具体是咋整呢?如图6。
    从远程克隆文件
    在本地首次输入克隆命令时候,需要输入yes,之后会发生警告,无视就好。如图7。
    首次从远端克隆项目

分支管理

何为分支,就是给别人的家建立一个镜像,然后在镜像的家上进行更改,不会影响别人家里的东西,当镜像里装潢好了,直接使用一种叫做分支合并的力量,将别人的家就直接变成镜像里的家。

大家如何创建与合并分支呢?

首先输入git checkout -b dev创建dev分支。
接下来输入git branch会得到当前所在分支的名字。
对文件进行编辑,完成后进行commit提交,均是在当前分支下进行的编辑。Master分支保持不变。
接下来跳转到master分支:git checkout master
通过master合并dev分支:git merge dev
最后删除dev分支:git branch -d dev

如何解决合并文件冲突的问题?

当两个分支使用git merge branch1发生冲突的时候,先解决冲突,方式手动编辑master分支中的文件,将branch1中的更改的内容放入。接下来将master提交。最后删除分支。在这个过程中,我们可以使用git log –graph进行分支合并的可视化。
平常的团队协作的过程如图8,当正常合并分支后,并将分支进行删除,则会造成该分支在git log中无法出现。因此如果需要查看所有分支信息的时候,需要增加上git merge --no-ff -m “merge with no-ff” dev。

  1. a和b分支修改不同位置文件时 dev合并完a之后,b分支先git pull拉取最新代码,再使用dev合并b就没有冲突了。
  2. a和b修改相同位置文件时 dev合并完a之后,b分支先git pull拉取最新代码,这时候就会有冲突,手动解决一下,dev再次merge b分支就不会冲突了。
    团队协作的图片来源于如下网页:协作图片来源链接
    团队协作流程图

如何解决新上传一个项目到分支的问题

当我们的代码到别人的网页上下载,然后想将其传递到一个分支中,如博主在之后的webapp搭建中的day12的项目。可以在git bash中进入当前项目,然后按序输入一下内容:

# 初始化项目
git init
# 将项目内容添加到暂存区
git add *
# 添加评论,将版本信息提交
git commit -m 'day12'
# 新建分支day12
git branch day12
# 进入分支day12
git checkout day12
# 链接远程github项目库
git remote add origin [email protected]:zht012323/awesome-python3-webapps.git
# 远程推送项目
git push origin day12

如何进行bug的修复

首先保存当前的进度,使用git stash,之后使用git checkout master跳转到需要更改的bug分支,接下来增加新的问题分支git checkout -b issue-101,在新分支上进行更改,更改完成后提交修复的bug分支,使用git add readme.txt进行,同时增加提交信息git commit -m "fix bug 101"进行bug提交,接下来转换到master分支,使用git checkout master,最后使用git merge --no-ff -m “merged bug fix 101” issue-101命令对分支进行合并。完成了bug修复后,跳转到dev分支,使用git checkout dev,接下来直接使用git stash pop恢复dev工作区的分支。当有多个保存的stash时候,先使用git stash list查看分支,接下来使用git stash apply stash@{0}进行恢复。

如何开发新功能

新建一个功能分支,对分支代码进行编辑,之后进行提交、合并,如果经费不足,删掉该功能,使用git branch -D 强行删除即可。

多人协作的模式

首先,可以试图用git push origin 推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/。

标签管理

啥是标签,通俗的将就是给当前的code版本加个索引,以后想重新用到这个版本的时候,直接使用索引就好,不用通过一串数字来进行版本的定位。
命令git tag 用于新建一个标签,默认为HEAD,也可以指定一个commit id;
命令git tag -a -m "blablabla…"可以指定标签信息;
命令git tag可以查看所有标签。
管理标签
命令git push origin 可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d 可以删除一个本地标签;
命令git push origin :refs/tags/可以删除一个远程标签。
自定义Git
忽略某些文件时,需要编写.gitignore;当然了,享受拿来主义https://github.com/github/gitignore 上存放了各种.gitignore文件。
.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
git config --global alias.st status 命令是将status配置为别名叫做st的快捷命令,之后就直接敲git st就好。

奉劝大家,用着用着就会了!!!

博主会随着自己的使用不断调整本博客,请大家多多指教。

参考博客
廖雪峰的官方网站

猜你喜欢

转载自blog.csdn.net/suyiwei5993/article/details/83279842