Git学习之旅

引言

在进入字节实习之后,发现很多很基础的东西都没搞懂。准备五月中旬或者五月底去上班,现在开始准备这些东西,希望进入公司能快速上手业务。

  • Git学习之旅:最基础的东西就是Git,学会Git起码你不会污染你队友的代码!
  • Go:新部门用的是Go,我将从Go基础—>Go高级—>Go项目来学习!
  • Sql:作为后端的开发人员,少不了写Sql!
  • redis:之前我没有用过redis,现在开始学着用!
  • 设计模式与代码简洁

Git常用命令

git init:初始化仓库的命令,通过这个命令才能生成一个git的仓库

git commit:将暂存区的文件(被add的文件)放入本地仓库

  • git commit -m:本次提交的时候携带一定的参数
  • git commit -a:把所有暂存区的文件加入到本地仓库
  • git commit -am:一般都是这两个命令一起用
  • git commit --amend:
    • 当上一次的修改发生错误,在git log中又不想让人看出来,可以通过这个命令。在本次提交的log将覆盖上一次的log

git add:将修改的文件(临时更改)放入暂存区

  • git add --all:将所有改动放入暂存区

git branch:创建/查看分支

  • git branch -a:查看所有分支
  • git branch branchName:创建分支
  • git branch -f branchName versionName:强制制定某一个分支指向对应的版本

git checkout:切换分支

HEAD可以理解为一个指针,所有的操作都是针对这个指针指向的记录,在这个记录上进行改动。

  • git checkout branchName:切换分支
  • git checkout -b branchName:切换分支,如果分支不存在,就创建对应的分支
  • git checkout hashCode:可以让HEAD只想某一个具体的记录

git clone:克隆远程仓库

git status:查看本地文件的状态

  • 红色的文件,没有被add到暂存区的文件
  • 绿色文件,被add到暂存区的文件
  • 没有文件,说明当前文件全部全部处于资源库

git merge:合并分支

  • git merge branchName:将其他分支合并到当前分支上

git reabse:合并分支

  • git reabse branchName:将当前工作放置到branchName上
    rebase和merge的区别在于,rebase能保持开发的线性历史,很清晰

git reset:回退操作1

使用git reset可以将当前的HEAD指针定位到你需要的git log上。
在这个例子中,当前的版本原本处于C2,但是想放弃C2这个版本。

  • git reset HEAD^:定位到C1,表明C1之后的版本更改全部废弃。但是这些更改还存在于电脑中,只是未放入暂存区。(相当于变成没有add的文件)
  • git restore xxx.xxx,把暂存区的文件全部放弃。这样就完成了一次本地回退
  • 本地回退会将版本降低。如果这个版本你上传到远程分支,现在想回退是没办法做到的。因为在回退版本的时候,推送到远程分支,会因为版本太低而被拒绝。
  • Git学习之旅_第1张图片

git revert:回退操作2

与git reset不同,git revert是重新创建一个新的版本,这个版本将之前版本的操作全部回退,并且将这些回退操作作为一个新的操作形成一个领先版本。
如图,C2`的内容和C1是相同

Git学习之旅_第2张图片
  • git revert 版本号。想撤销哪个版本,就写对应的版本号

git restore:回退操作3

  • git resotre fileName:将未放入暂存区的文件改动撤销
  • git resotre --staged:将放入暂存区的文件恢复提出来,变成红名状态

git cherry-pick:操作版本的命令

事实上git cherry-pick 一直与 git rebase -i一起来学
在对应的版本上使用

  • git cherry-pick hashCode。就能把对应版本的更改放到改版本上

git fetch:更新本地仓库

一般都会使用git pull
git pull = git fetch + git merge

git push

推送数据到远程仓库
git push --set-upstream origin dev 一般类似这样的命令都是说明,远程仓库没有设置对应的分支

git pull

git pull更新当前所有的分支
git pull == git fetch + git merge
git pull --rebase == git fetch + git rebase

Windos连接Github

  • 第一步:下载git并且安装
    https://git-scm.com/download/win
    除了路径其他直接一步到位即可
  • 第二步:设置一个github的账号
  • 第三步:配置自己的账户和邮箱
    git config --global user.name "70pice"
    git config --global user.email "[email protected]"
    
  • 第四步:生成SSH Key并且配置到自己的账户中
    Git学习之旅_第3张图片
    Git学习之旅_第4张图片

Git merge 和 Git rebase

git merge和git rebase都用于和并代码。
git merge能清晰地展示父节点,而git reabse可以线性的展示开发历程。在团队开发的时候,用哪个命令就是见仁见智的了!

Git merge

  1. 基于master创建了create branch1/2/3分支
  2. 基于create branch 1创建了create branch4分支
  3. 分别合并到create branch2中
    Git学习之旅_第5张图片
    可以看出整个过程非常的清洗,每一个节点(commit log)的父节点都清晰明了,但是显得整体的开发分支比较散乱

Git rebase

git rebase的中文名为变基
请使用git rebase的时候严格遵守

  1. git rebase master(other_branch)
  2. git rebase other_branch (master)
    使用rebase是想要保证一条独立清爽的开发线,一般而言都是在dev分支上开发,合并到master上,如果有其他同事已经在master上进行开发并且完成了commit操作,原本的基地就被改变了,首先git rebase master能让同事的操作变成你的基地,这样你再合并的时候相当于是基于新master节点创建分支进行开发的。这样就有干净清爽的开发分支了。
    假设此时
    有两条分支 master dev
    master 已经被其他开发者commit了两次
    dev 由你独立开发commit了两次
    在进行rebase的时候,要处理最多两次的冲突(假设有冲突的话)

Git 回退

  • git revert:用于远程仓库的回退,如果当前版本发现问题,并且已经被push到远程仓库上了,这时本地再使用git reset回退,回退之后再重新push会出现版本落后不允许被push的提示。
     如下图所示,我在本地reset了一个版本
Git学习之旅_第6张图片
Git学习之旅_第7张图片
Git学习之旅_第8张图片
  • git reset:用于本地仓库的回退
    注意,gir reset version1,代表version1之后的版本更改全部被舍弃

你可能感兴趣的:(git,学习,github)