文章目录
前言
详细学习可参考以下网站:
1、https://www.w3cschool.cn/git/git-branch.html
2、https://www.runoob.com/git/git-pull.html
3、https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%89%93%E6%A0%87%E7%AD%BE
4、https://blog.csdn.net/qq_32452623/article/details/78355976
5、https://learngitbranching.js.org/?locale=zh_CN
一、本地创建仓库,上传到GitHub
先在本地创建仓库,并在GitHub上创建对应的仓库,保存对应的地址:https://github.com/XXX/XXXXX.git。之后执行以下命令:
git init # 初始化,生成.git文件夹
git config user.name userName # 配置GitHub的用户名和地址
git config user.email userName@gmail.com
git remote add origin https://github.com/XXX/XXXXX.git # 添加远程仓库https地址,这个地址需要在GitHub网站上对应的事先创建的仓库的地址
git add . # 添加当前目录中的所有文件到git中,以方便后面的push
git commit -m "remote commit"
git push -u origin main # 这一步可能出错
git pull # 如果GitHub远程仓库已经有内容了需要先pull
- git pull说明
– 如果GitHub远程仓库已经有内容了需要先pull,进行同步,该命令是从远程获取代码并合并本地的版本,是 git fetch 和 git merge FETCH_HEAD 的简写。
– git pull 的正常命令模式是:git pull <远程主机名> <远程分支名>:<本地分支名>;意思是将<远程主机名> 上的<远程分支名>分支拉取到本地分支<本地分支名>
– 更新操作:git pull 或者 git pull origin
git status # 查看当前修改文件,没问题执行下一步
git add . # 添加所有更改文件,其中的'.'可以换成相应的更改文件
git commit -m "your descriptions" # 注意在push之前一定要commit 否则将会出错:
git push -u origin main #或者 git push origin main:main
- git push <远程主机名> <本地分支名>:<远程分支名>说明
二、创建分支和打标签
1.创建分支
git branch -a # 查看当前git所有的分支
git branch myBranchName # 创建一个名为myBranchName的分支
git checkout -b branchName2 # 创建新分支branchName2并切换到该分支下
git checkout branchName # 切换到分支branchName
git branch -M newName # 将当前分支的名字改为newName
git branch -d branchName # 删除本地分支branchName
git push origin branchName # 将分支branchName上传到GitHub上
代码如下(示例):
2.打标签
像其他版本控制系统(VCS)一样,Git 可以给仓库历史中的某一个提交打上标签,以示重要。 比较有代表性的是人们会使用这个功能来标记发布结点( v1.0 、 v2.0 等等)。
git tag # 列出当前所有的标签,或者git tag -l
git tag -a v0.0 -m "version0.0" # 创建附注标签v0.0 ,附注说明为: "version0.0"
git show v0.0 # 可以看到标签v0.0的信息和与之对应的提交信息
git tag v0.0-lw # 创建轻量级标签 v0.0-lw
git log --pretty=oneline # 查看提交历史
git push origin v0.0-lw # 共享标签v0.0-lw到远程(GitHub)
git push origin --tag # 共享所有的标签
git tag -d v0.0 # 删除标签,这样并不会同步到远程的GitHub上,因此需要执行以下命令之一
git push origin :refs/tags/v0.0 # 或者:git push origin --delete v0.0
三、git的常用操作以及解释
1 git commit
git的提交记录尽可能的轻量,保存的是本地的快照,这个记录git尽量确保轻量,因此主要保存的是上一节点不同之处。同时保存历史版本,因此每一笔记录都存在parent节点。
# 一个git commit 代表一笔修改
git commit
2 git branch
分支是非常轻量的。为什么这么说呢?因为分支只是简单的指向某一个提交记录,并不会占用内存。使用分支意味着是想在这个分支所指向的提交记录以及其所有的parent下开始新的创作和提交。
# 创建新的分支名为 branchName
git branch branchName
# 切换到分支branchName上
git checkout branchName
3 git merge
合并两个分支。即通常是将某个分合并到主分支。
如上图所示,要将bugFix分支合并到main分支,可以执行如下命令:
git merge bugFix
4 git rebase
rebase的实质是复制一系列的提交记录,然后在某个地方逐一的放下去。
将C3所在分支bugFix rebase到main分支
# 切换到bugFix分支
git checkout bugFix
# 将main分支rebase到bugFix
git rebase main
5 分离HEAD
git的相对引用
# 将HEAD向上移动一个提交记录
git checkout ^
# 将HEAD向上移动n个提交记录
git checkout ~n
如图将HEAD向上移动到C0,可执行如下指令
# 执行如下命令4次
git checkout HEAD^
# 或者执行如下命令
git checkout HEAD~4
强制修改分支位置:
## 将main分支强行改为在C0处
git branch -f main HEAD~4/C0
6 git reset和git revert,撤销变更
git reset C3# 是针对本地修改,不会同步到远程分支
git revert HEAD
如图所示,C3是通过git reset 实现的
C2’是git revert 实现的。
两者的区别:
git reset 直接撤销回退到上一个某个版本
git revert HEAD是将要撤销的C2记录保留,并完全复制一个C1到C2‘作为新的改变
7 整理提交记录
是
如上图所示要将C2和C3提交整理到main分支下,可执行如下指令
git cherry-pick C2 C3
8 git rebase -i和git cherry-pick
git rebase -i是git rebase --interactivation的缩写。
该命令的作用是将某个branch下的提交删除合并或者整理重新排序,如下图所示为重新排序之后的示意图。
# 实现上述的命令是这样的(HEAD 和 main初始位置在C5)
git rebase -i HEAD~4
# 然后根据UI界面进行调整。
9 git tag给某个记录打个tag
该命令是对某个提交打上永久的标签。以下命令是给ref引用打上名为’tagName’的标签
git tag tagName <ref>
给某个tag添加描述:
git describe <ref>
<ref>可以是任何能被 Git 识别成提交记录的引用,如果你没有指定的话,Git 会使用你目前所在的位置(HEAD)
输出格式如下:
<tag>_<numCommits>_g<hash>
tag 表示的是离 ref 最近的标签, numCommits 是表示这个 ref 与 tag 相差有多少个提交记录, hash 表示的是你所给定的 ref 所表示的提交记录哈希值的前几位。
当 ref 提交记录上有某个标签时,则只输出标签名称
如图所示如果分别执行如下命令:
git describe main
# 输出:
v1_2_gC2
git describe side
# 输出:
v2_1_gC4