自我笔记 - Git 日常使用

Git 基础篇

人生不能重来,但Git可以

什么是git ?

分散式版本控制使用 SHA1 杂凑演算法只在乎档案内容,不在乎目录

基础概念

当执行 git init 初始化指令后,会在该资料夹下面新增一个 .git 的资料夹,该资料夹就是 Git Repository 的本体所在。其中包含 blob objects, branch, remote, config 设定档等。.git 储存了 Git 所有资讯。在 Local 端对 Git 的所有操作,也都是反映在这个资料夹中。

.git 内包含几个部分

HEAD - 目前所在的 branch。config - 该 Git 资料夹的区域设定档。index - 资料暂存区objects (如下图所示) - Git 所有资料的 blob objects 储存处,主要包含三种类型commit objects - 每笔 commit 的资讯,包含 author, parent commit
object, commit message 以及所指向的 tree object 资讯。tree objects - 记录资料夹的档案结构,包含档案的路径,名称,模式以及对应的 blob objects。blob objects - 记录实际档案物件的二进位内容。

当我们每次进行 branch 切换时,

Git 会去 objects 资料夹中找出该 branch 对应的 commit object从 commit object 中取得对应的 tree object 后再由 tree object 所记录的档案结构将资料夹回复到该 branch 所对应的状态
http://img2.58codes.com/2024/20132538wXm35SdmJv.png

基本 Action

在git中最常用的指令

git clone <url> : 将远端数据库克隆一份至本地git add : 将档案加入至暂存区域git commit : 将存于暂存区域的档案提交到本地储存库git push origin <branchName> : 推至远端数据库git pull origin <branchName> : 将远端数据库与本地分支同步git checkout <branchName> : 在本地分支切换(连动工作目录,如基础概念所示)

commit 重点在于让协同伙伴了解做了那些改变

Why ? 为了甚么而做,可能是使用者提了什么需求、发现了那些BUG...
What ? 做了什么
How ? 如何做
http://img2.58codes.com/2024/20132538Ys6B699jIk.png


状况题记录

如何修改 commit 纪录

修改 commit 讯息
注记: 新的commit会更改SHA-1值修改 最新一笔 纪录:
git commit --amend -m "新讯息"
修改其他历史纪录:
git rebase -i <须回朔的範围SHA-1值>跳出 Vim 编辑器:  pick ec327e4 emcs 功能开启  pick d3f0b4a emcs 功能初版  pick 5b72b9e sqc 功能新增  pick b5ba78a sqc first commit
说明:
这里的pick代表保留这次的commit,不做修改,将以上改为 ↓
reword代表改变这次的commit,可用 r 简写
  reword ec327e4 emcs 功能开启  reword d3f0b4a emcs 功能初版  pick 5b72b9e sqc 功能新增  pick b5ba78a sqc first commit
上面选择修正两项commit讯息,按下储存离开后,会再跳出vim介面即可修改内容,如下
  ee6e6d6 sqc 功能新增  8c2b80f emcs 功能初版(commit修正)  31726f3 emcs 功能开启(commit修正)  1507b8b Initial commit

穿梭各版本

git reflog 查看所有纪录

git log --oneline -n 可以查看目前所在分支前 n 次的commit纪录

使用 reset

mixed是预设的参数,Commit 拆出来的档案会被丢回工作目录。soft 模式,Commit 拆出来的档案会直接放在暂存区。hard 模式,Commit 拆出来的档案,不管是工作目录以及暂存区的档案都会丢掉。git reset --hard HEAD 回复到最新提交版本git reset --hard HEAD~ 等于 ~1 回复到上一个提交版本git reset --hard HEAD~n n 等于往上第几个提交版本 回复之前指定的提交版
(也可以使用SHA-1值)

使用 revert

git revert HEAD
会新增一个 Commit 来反转(或説取消)另一个 Commit 的内容,
原本的 Commit 依旧还是会保留在历史纪录中。
虽然会因此而增加 Commit 数,但通常比较适用于已经推出去的 Commit,
或是不允许使用 Reset 或 Rebase 之修改历史纪录的指令的场合。

"远程版本回推"

注意: 该方法因为会修改远程,所以在使用时必须与同伴沟通好,尽量避免此方法先按照上述将本地branchA退回到希望的版本在使用 git push -f origin branchA

整理分支

在开发过程中,为了确保主线不被开发过程中的代码影响,所以我们会开立许多分支(功能),这样做的好处是可以独立开发互不影响,但相对的就会有许多支线,相当混乱的状况,**所以当我们开发完成后,可以先做分支整理**在推至主线上,这样在查看纪录时也比较方便。

删除本地分支: git branch -d <branchName>删除远程分支: git push -d origin <branchName>合併分支:git rebasegit merge

突然要修改别的分支,但手上的分支尚未到一个段落

参考

先进行add、commit(完成后就可以先进行其他分支的工作)切回未处理完成的分支git reset HEAD^ (reset预设是mixed,所以档案会被丢回工作区)

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章