这里直接贴一个参考合集,该合集内容较多,这里只提取关键部分
从零开始手把手学习 Git 神器_慧天城寻的博客-CSDN博客
基础操作
初始化与克隆
1 | # 在当前目录初始化一个新的Git仓库 |
关联远程仓库
1 | # 添加远程主机名(通常命名为origin)及对应URL |
创建分支
1 | # 1. 创建分支 |
拉取远端指定分支
1 | #查看远程分支 |
查看当前修改了哪些内容
git status 命令用于查看在你上次提交之后是否有对文件进行再次修改。
1 | git status |
git diff [file] 命令用来显示暂存区和工作区文件的差异,显示的格式正是Unix通用的diff格式。也可以使用 git diff HEAD -- [file] 命令来查看版本库和工作区文件的区别。
注意:如果是新增的文件,git diff不会显示,但在git status会有
删除文件
1 | # 从版本库和工作区中删除文件,等同于手动删除后再执行git add |
撤销修改
1 | # 将文件回退到上一次add或者commit的状态(工作区修改全部丢弃) |
版本回退
将工作区文件回到上一次提交时的状态,也即从版本库重新拉取文件到工作区。
1 | # 将文件回到上一次提交状态(add和commit都算) |
执行 git reset 命令用于回退版本,可以指定退回某一次提交的版本。要解释一下回退本质是要将版本库中的内容进行回退,工作区或暂存区是否回退由命令参数决定:
git reset 命令语法格式为:git reset [–soft | –mixed | –hard] [HEAD]
–mixed 为默认选项,使用时可以不用带该参数。该参数将暂存区的内容退回为指定提交版本内容,工作区文件保持不变。
–soft 参数对于工作区和暂存区的内容都不变,只是将版本库回退到某个指定版本。
–hard 参数将暂存区与工作区都退回到指定版本。切记工作区有未提交的代码时不要用这个命令,因为工作区会回滚,你没有提交的代码就再也找不回了,所以使用该参数前一定要慎重。
HEAD 说明:
可直接写成 commit id,表示指定退回的版本
HEAD 表示当前版本
HEAD^ 表示上一个版本
HEAD^^ 表示上上一个版本
以此类推…
也可以使用波浪线数字表示:
HEAD0 表示当前版本1 上一个版本
HEAD
HEAD~2 上上一个版本
以此类推…
提交到暂存区
1 | git add . |
提交到仓库
1 | git commit -m "message" |
修改上一次提交
如果提交后发现漏掉了某个文件,或者提交信息写错了,且尚未推送到远程,可以使用以下命令将本次修改合并到上一次提交中:
1 | # 修改文件后 |
获取与拉取的区别
1 | # 仅获取远程更新到本地,不自动合并到当前分支 |
git log和git reflog
1 | git log |
打标签
1 | # 在当前提交打标签 |
分支管理
查看,新建,切换分支
1 | git branch |
合并分支
git merge 命令用于合并指定分支到当前分支。
Fast-forward 代表快进模式,也就是直接把 master 指向 dev 的当前提交,所以合并速度非常快。
当然,也不是每次合并都能 Fast-forward,我们后面会讲其他方式的合并。
Git 支持我们强制禁用Fast forward模式,那么就会在 merge 时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
下面我们实战一下 --no-ff 方式的 git merge。
请注意 --no-ff 参数,表示禁用 Fast forward 模式。禁用 Fast forward 模式后合并会创建一个新的 commit,所以加上 -m 参数,把描述写进去。
1 | git merge [branch_name] |
注意:如果你先在master上新建了一个分支branch1,然后在branch1上进行修改,这个时候你想丢弃修改,试图使用git merge master将master分支合并到当前分支,结果发现毫无变化。
注意merge并不是将master分支的内容复制到当前分支,只是把master上的提交合入当前分支的提交树,这两个分支上的所有提交的历史都是存在的。由于branch1是从master分支创建的,且之后master没有改变,那么执行merge不会有任何变化。
删除分支
合并完成后,dev 分支对于我们来说就没用了,那么 dev 分支就可以被删除掉。使用 git branch -d 命令,注意如果当前正处于某分支下,就不能删除当前分支,需要切换到其他分支进行删除。如果要强制删除未合并的分支,使用大写字母 D。
1 | git branch -d [branch_name] |
保存工作区状态
如果需要暂时保存工作区内容,切换分支可以如下操作:
1 | # 暂时存储工作区内容 |
恢复现场也可以采用 git stash apply 恢复,但是恢复后,stash内容并不删除,你需要用 git stash drop 来删除;你也可以进行多次 stash,恢复的时候,先用 git stash list 查看,然后恢复指定的 stash,用命令 git stash apply stash@{0}。
正确的合并方式
最好在自己的分支上合并下 master,再让 master 去合并 dev,这样做的目的是有冲突可以在本地分支解决并进行测试,而不影响 master。
远程仓库
1 | git remote |
1 | git push <远程主机名> <本地分支名>:<远程分支名> |
1 | git pull <远程主机名> <远程分支名>:<本地分支名> |
远端拉取指定分支到本地
1 | # 查看远端分支 |
设置代理
1 | # 查看 |
常见实战场景与命令组合
场景一:日常代码提交与同步
这是最基础的工作流,适用于个人在单一分支上开发。
1 | # 1. 查看当前修改了什么 |
场景二:新功能分支开发与合并
适用于团队协作,在独立的分支上开发新功能,完成后再合并到主分支。
1 | # 1. 切换到主分支并拉取最新代码 |
场景三:将多次提交合并为一次(变基)
在开发过程中可能会产生很多零碎的提交记录(如fix typo、update style等),在推送到远程或发起合并请求前,希望将这几次提交合并为一次,保持提交历史整洁。这里使用交互式变基。
假设当前分支有3次新提交,想要合并它们:
1 | # 1. 查看提交记录,确认要合并的次数 |
场景四:解决合并冲突
当两个分支修改了同一个文件的同一位置时,合并会产生冲突,Git会提示冲突并暂停合并。
1 | # 1. 执行合并操作时发现冲突 |