前言
git的功能是非常强大的,如果仅仅使用add,commit等简单指令的话,是不能把git的全部功能发挥出来。所以我们需要学习使用一些进阶的指令。
版本回退
在开发过程中,我们项目的代码不可能只有一个版本,通常是一个循序渐进逐步完善的过程。要是有时光穿梭机的话,每当代码出错的时候,我们只需要穿越到上一个版本,然后重新编写一下。而,git能够很好的控制版本,具有强大的时光穿梭功能。
- 查看历史版本:使用git log 可以查看提交的历史,根据想要回退版本的信息直接穿梭过去。当提交记录较多的时候,我们可以采用git log --online 让历史记录以一行的格式显示。
- 版本回退:我们可以使用git reset 命令回退版本,它一共有三种模式:--soft、--mixed(默认)以及--hard。
- --soft模式:将HEAD指针和当前分支指向指定提交,但不会改变工作区和暂存区的内容。也就是说,soft只是撤销了提交操作,之前的修改仍然保留在工作区和暂存区中,我们还可以再次提交这些修改。如果要回到上个版本,可以执行:
git reset --soft HEAD~1
其中HEAD代表当前的版本,~表示上几个版本
- --mixed模式:这是git reset的默认模式,它会把HEAD指针和当前分支指向指定提交,并将工作区的文件回退到指定提交的状态,但不会清空暂存区。也就是说,它会取消暂存区的文件修改,将文件恢复到上一次提交的状态,但是工作区中已修改但未暂存的文件还保留着。
- --hard模式:这个模式是做的最绝的,它会把HEAD指针和当前分支指向指定提交,并将工作区和暂存区的内容都回退到指定提交的状态,即丢弃所有未提交的修改。一旦使用这个操作未提交的修改就无法恢复。
以上就是版本回退的主要操作。但是,在我们开发的过程里,如果错误提交了代码,那么我们只能另寻操作了。
撤销提交:git revert ,这个操作和git reset不同,它不会更改历史提交记录,而是创建一个新的提交,它会撤销指定提交的修改,同时保留该提交之后的修改。如果要撤销多个提交,我们可以依次使用git revert 命令,指定要撤销的哈希值。
储藏与恢复
在开发的过程中,有时候我们可能会碰到开发功能到一半的时候,突然接到紧急任务要我们切换到其他分支去开发。但是我们目前的代码功能还没有开发完毕,又不想提交到远程仓库里,那么这时候我们就可以使用git的储藏功能了。
- 储藏工作现场:使用git stash 命令可以把当前工作目录和暂存区的修改储藏起来,将工作区恢复到上一次提交的状态。我们同时也可以给本次储藏附上一个描述,git stash save "description"。执行该命令后,当前的修改就会被保存起来,工作区变得干净,然后我们就可以切换到其他分支继续开发代码了。
- 查看储藏列表:使用git stash list 命令可以查看所有的储藏记录,每一个储藏都有一个索引方便我们查看。
- 恢复储藏的修改:当我们完成了目前的紧急任务,想要恢复之前储藏的工作的时候,我们可以使用git stash apply 命令来应用之前储藏的修改。这会将储藏的修改应用到当前工作区的目录和暂存区中,但是并不会从暂存区删除该记录。我们也可以使用储藏的索引,直接恢复我们想要的储藏。
- 修改或删除储藏:当我们想要删除储藏的修改并从列表里删除它时,我们可以使用git stash pop 命令。如果我们不再需要某个储藏,我们也可以使用git stash drop 来删除某个储藏。当我们想要彻底清除储藏的时候,我们可以采用git stash clear命令。
标签管理
在我们的开发过程中,标签是一个非常方便有用的功能。我们可以对某个特定的版本的提交打上标记,方便我们快速定位以及方便管理。我们可以使用git tag name 创建一个简单的标签。如果想要为该标签附上一些信息的话,那么就要使用git tag -a tag_name -m description 。如果我们想要查看当前有什么标签时,我们可以使用git tag 查看仓库里的所有标签。要是还想查看标签的具体信息,就可以使用给git show tag_name 会显示标签的相关信息以及对应的提交信息。标签也可以像代码一样推送到远端,只需要使用git push remote_name tag_name 命令。
解决冲突
在多人协作开发的过程中,代码发生冲突是非常常见的事情。每个人所拥有的版本可能是不完全相同的,那么git是如何确保代码进度能够正常向前推进呢?
每当我们使用git pull 或git merge 的时候,如果出现了代码冲突,git会显示哪些文件的哪个地方发生了冲突,我们最常见的解决办法就是手动解决冲突,把想要保留的部分留下。编辑完代码后,保存文件,在通过git add 和commit操作重新上传代码。
Ending
以上内容就是一些git的进阶需要掌握的知识了。