目录
1.什么是git
Git是一个分布式版本控制系统,用于跟踪和管理软件开发项目中的代码变更。它可以记录每个文件的修改历史,允许多个开发者同时协作工作,并提供回滚到历史版本、分支管理以及合并不同代码版本等功能。
使用Git可以轻松地在不同的开发环境之间共享和同步代码。它还提供了强大的分支功能,使得团队可以并行开发不同的功能或修复bug,并在完成后将它们合并到主要的代码库中。
Git的工作原理是通过创建一个本地代码仓库,开发者可以在本地进行代码的修改和提交。每个提交都被记录下来,并可以追溯到特定的作者和时间。开发者可以在本地创建分支,在不影响主代码的情况下进行实验和修改,然后将这些修改合并到主分支上。
除了本地仓库,Git还支持与远程仓库进行交互,例如GitHub或Bitbucket。这使得开发者可以将本地代码库推送到远程服务器上,与团队成员共享代码,进行协作开发和代码审核。同时,也可以从远程仓库拉取最新的代码更新到本地。
总的来说,Git是一种强大而灵活的版本控制系统,被广泛应用于软件开发领域,帮助开发者更好地管理和跟踪代码变更。
2.快速上手
在目标文件夹中打开gitbash
首先需要设置自己的名字与邮箱地址确保能够知道项目是谁更新的
1.git config --local user,name
2.git config --local user,email编辑
1.git init(初始化文件夹,让git跟踪你想让其控制的文件夹,对于对应文件夹只需要执行一次即可)
在当前文件夹创建一个隐藏文件夹.git
编辑
2.git status(用于显示当前代码库(仓库)的状态信息。它会告诉你有关代码库中文件的修改、暂存和提交状态的关键信息。)
如下中有untracked files说明文件并未存放到暂存区
编辑
3.git add
可以git add 单独文件也可以通过 git add --all将所有文件放入暂存区域
编辑
4.git commit -m ""
将文件放进存储区 并加以信息表明版本更新的内容
git commit -m "具体信息",在我这新创建了test.txt则描述信息为 create file
编辑
5.查看历史版本记录
git log
编辑
可以看到第一个版本具体日期 时间 作者 联系方式 还有版本的更新总结
着重理解git add 与git commit 区别
编辑
6.在修改文件后再更新版本,如果修改了文件内容(在txt文件里面加一个1)后,通过git status 可以看到现在文件状态
modified test.txt意味着文件已经发生更改,那么如果更改完成之后,只需要将其再次 git add 和git commit 一遍,再通过git log查看可以看到现在有两条记录,即两个半
编辑
6.在多版本下想要回溯到某个版本
那么如果多个版本下需要回溯到某个版本则需要通过 git checkout实现
编辑
1). 解释一下@与^ ,首先每一个版本都有一个指针指着,一般就是指向头部即使最新的版本,那么@就是Head 而^number表示上number个版本,比如@^2回溯上两个版本,回到图中可以看到文件回到了刚刚创建的阶段
2).回到原来版本 只需要git checkout HEAD --test.txt即可
7.文件不小心删除的情况下想要回溯文件
直接用git checkout fileName
或者git checkout .全体恢复
编辑
编辑8.回到原来版本
如果
9.git blame
如果更新代码后出错,想要找到更新这代码的人就可以通过git blame查找是谁干的好事
10.删除最近的commit等等,这些可以通过后面的修改历史记录(git rebase)统一管理
3.分支
一般一个项目可能有多个方案,需要将每个方案完善后选出一个最优的,那么一般情况下会通过复制文件夹的方式,得到多个基础框架。但是这样操作非常不方便并且并不节省空间,但是git中的分支可以完美解决这些问题
1.什么是分支
类似于一棵树上的分叉,相同的数据就放在树根,只有不同的数据才会长出枝杈
2.创建分支
git branch name
编辑
可以看到一开始都是只有一个分支,即主分支,通过git branch cat 创建一个cat分支
那么cat分支与主分支目前文件里面都有test.txt,接下来就是实现分支不同
3.切换分支
git checkout branchName
编辑
切换到了cat分支 并创建了一个cat.txt
再回到主分支
编辑
4.分支的合并
git merge (branchName)
编辑
注意如果相同文件缺有修改不同则会发生冲突,比如test.txt在matser分支里为1,在cat分支里内容为空则合并时候会发生冲突
5.删除分支
git branch -d (branchName)
因为将cat 与master合并了,那么cat也就不需要了可以将其删除
编辑
6.git reflog 操作日志
由于git log只能知道项目的版本信息但是不知道其操作的日志
所以就有了reflog可以查看每一次的操作信息
编辑
7. 回到合并前
前面有提到,git log只能知道项目的版本信息但是不知道其操作的日志,所以我们需要通过git reflog 操作日志来进行回溯(注意reflog有时间期限)
通过git reset返回
git reset id --hard||mixed||soft
编辑
其中35be1b2是通过内容计算SHA-1得到的值,可以理解为其id(身份)
4.修改历史记录
如果想要修改比如版本的commit ,比如说因为一点点的修改就将其commit起来导致有大量的版本,那么真正比较重要的版本可能找起来就会很麻烦,所以通过git rebase -i id进行群管理
编辑
首先查看git log --oneline可以将版本信息简化,只保留版本留下的信息
git rebase -i 75151e9表明我想从create file这个版本开始到最新版本的管理,确定后会打开一个vim编辑器
首先可以看到第二行就是版本与其id 现在解释前面的pick
可以通过vim修改前面的pick对这条内容进行操作,pick表示保留这一条commit不做更改
而如果将pick删掉改为drop则表明删除这条内容
还有很多前缀,在下面#中都有表明前缀以及其作用
# Rebase 75151e9..35be1b2 onto 75151e9 (1 command)
#
# Commands:
# p, pick <commit> = use commit -》保留
# r, reword <commit> = use commit, but edit the commit message-》修改内容
# e, edit <commit> = use commit, but stop for amending -》拆分为多个小commit
# s, squash <commit> = use commit, but meld into previous commit-》合并多个commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# . create a merge commit using the original merge commit's
# . message (or the oneline, if no original merge commit was
# . specified). Use -c <commit> to reword the commit message.