《廖雪峰Git教程》学习记录

《廖雪峰Git教程》学习记录

作者:婷婷

摘要:这段时间学习了廖雪峰老师的Git教程,廖老师已经写得非常易懂了,本人在此处记录了学习到的在windows环境下Git的基本用法,写此博客,便于日后查找。具体详细内容请参考廖雪峰老师教程

1.创建版本库

注:Git跟踪并管理的是修改,而非文件

工作区:在电脑里可以看到的目录;

暂存区:Git版本库里,称为stage或index的部分;

分支:Git自动创建的master。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9Pc230c7-1580899630274)(C:\Users\Tingting Wang\AppData\Roaming\Typora\typora-user-images\1580871337942.png)]

  • 创建版本库
  1. 创建空目录
$ mkdir learngit
$ cd learngit
  1. 初始化仓库
$ git init

在创建的空目录下编写一个README.md文件,内容随意。

  1. 将文件添加到仓库
$ git add README.md
  1. 将文件提交到仓库
$ git commit -m "wrote a readme file"

其中,git add <file>可反复使用,添加多个文件后,再使用git commit -m <message>一次提交所有文件。

2. 版本回退

提交了不合适的修改到版本库时,想要撤销本次提交,可使用版本回退。

  • 查看提交日志
$ git log

或者查看简化版,显示的第一部分为commit id(版本号):

$ git log --pretty=oneline
  • 版本回退

在Git中,用HEAD表示当前版本,也就是最新的commit id,上一个版本就是HEAD^,上上一个版本就是HEAD^^,往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

  1. 回退到上一个版本:
$ git reset --hard HEAD^
  1. 回退到指定版本:
git reset --hard <commit id的前五个字符>
  • 查看命令日志

可以看到每一条自己输入的历史命令。

$ git reflog

3. 管理修改

  • 查看状态
$ git status
  • 查看工作区与版本库的区别
$ git diff HEAD -- <file>

4. 撤销修改

  • 撤销暂存区修改

    暂存区的修改回退到工作区。具体指已经使用git add <file>命令的情况。

    命令:git reset HEAD <file>

    或:git restore --staged <file>

  • 丢弃工作区的修改

    命令:git checkout -- <file>

    或:git restore <file>

    git checkout是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原” 。

5. 删除文件

  • 删除工作区文件
$ rm <file>
  • 删除版本库文件
$ git rm <file>
$ git commit -m <message>

6. 远程仓库

6.1 创建远程仓库

使用GitHub网站作为自己的远程仓库。注册一个账户,即可获得免费的Git远程仓库。

本地Git仓库与GitHub仓库之间的传输通过SSH加密,具体设置方法如下:

  1. 创建SSH Key

在windows下,打开Git Bash,创建SSH Key:

$ ssh-keygen -t rsa -C "[email protected]"

注意替换邮件地址为自己的邮件地址,一路回车。 之后可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

  1. 登陆GitHub创建连接

打开“Account settings”,“SSH Keys”页面,然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。

  1. 添加远程库
  • 登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库 。
  • 在Repository name填入learngit,其他保持默认设置,点击“Create repository”按钮,创建一个新的Git仓库。
  1. 把本地仓库的内容推送到GitHub仓库
  • 将本地库与远程库关联:
$ git remote add origin [email protected]:username/learngit.git

注意替换username为自己的GitHub用户名。 远程库的名字就是origin,这是Git默认的叫法 。

第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告,选yes即可。

  • 将本地库的内容推送到远程:
$ git push -u origin master

第一次推送master分支时加-u, 加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令 。 每次本地提交后,只要有必要,就可以使用命令:

git push origin master

推送最新修改 。

6.2 从远程仓库克隆

  1. 登陆GitHub,创建新的仓库。
  2. 克隆一个本地库:
git clone [email protected]:username/repo-name.git

7. 管理分支

  1. 创建分支dev
$ git checkout -b dev

git checkout命令加上-b参数表示创建并切换,等价于:

$ git branch dev
$ git checkout dev
  1. 查看当前分支
$ git branch
  1. 切换回master主分支
$ git checkout master

也可以使用switch语句。

  • 切换分支
$ git switch -c dev
  • 切换回master
$ git switch master
  1. 合并分支
$ git merge dev
  1. 删除分支
$ git branch -d dev
  1. 查看分支合并图
$ git log --graph --pretty=oneline --abbrev-commit
  1. 解决冲突的办法

修改冲突部分内容后,重新提交到Git仓库。

  1. 合并分支时关闭Fast Forward模式
$ git merge --no-ff -m "merge with no-ff" dev
  1. 修复分支bug
  • 保存工作现场
$ git status
  • 创建临时分支

确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支:

$ git checkout master
$ git checkout -b issue-101

在临时分支修复bug,提交内容。

$ git add <file>
$ git commit -m "fixed bug 101"

切换回master分支,并合并临时分支,然后删除临时分支。

  • 恢复工作现场

返回工作分支:

$ git switch dev

查看工作现场列表:

$ git stash list

恢复现场:

$ git stash pop
  • 修复工作现场同样的bug
$ git cherry-pick <bug fixed id>

多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:

$ git stash apply stash@{0}
  1. 强行删除

要丢弃一个没有被合并过的分支,可以通过

$ git branch -D <name>

强行删除 。

  1. 多人协作
  • 查看远程库信息
$ git remote

或者:

$ git remote -v
  • 推送分支
$ git push origin <分支name>
  • 抓取分支
$ git clone [email protected]:username/repo-name.git

默认抓取本地的master分支。 要在dev分支上开发,就必须创建远程origindev分支到本地:

$ git checkout -b dev origin/dev

推送冲突时:

先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突 。

$ git pull

git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置devorigin/dev的链接,之后再git pull

$ git branch --set-upstream-to=origin/dev dev
$ git pull

本地合并冲突时,手动解决,参考7.解决分支冲突的办法部分内容。

  1. 分支整理

把本地未push的分叉提交历史整理成直线 。

$ git rebase

8. 管理标签

标签tag与某个commit绑在一起,易于记忆,比如:commit号是6a5819…的tag是v1.1。

  • 创建标签
$ git tag <tagname>
  • 查看标签
$ git tag
  • 对指定commit打标签
$ git tag <tagname> <commit id>

标签不是按时间顺序列出,而是按字母排序。

  • 查看标签信息
$ git show <tagname>
  • 创建带有说明的标签
$ git tag -a v1.0 -m "version 1.0 released" 1094abd
  • 删除本地标签
$ git tag -d v1.0
  • 推送标签到远程
$ git push origin v1.0

或者推送所有本地标签:

$ git push origin --tags
  • 删除已推送的标签

先删除本地标签:

$ git tag -d v1.0

再删除远程标签:

git push origin:refs/tags/v1.0

9. 使用GitHub参与开源项目

  1. 将开源项目Fork到自己的GitHub账号下
  2. 从自己的账号下克隆项目
git clone [email protected]:username/project.git
  1. 修改完成后推送到自己的仓库
  2. GitHub上发起pull request

10. 自定义Git

  • 显示颜色
git config --global color.ui true

忽略文件的原则是:

  1. 忽略操作系统自动生成的文件,比如缩略图等;
  2. 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
  3. 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

具体gitignore文件规则

  • 强制添加忽略文件
git add -f <file>
  • 查看错误规则
$ git check-ignore -v <file>

参考文献

廖雪峰的官方网站Git教程

发布了3 篇原创文章 · 获赞 3 · 访问量 1574

猜你喜欢

转载自blog.csdn.net/weixin_37701550/article/details/104186686