Git命令
Git是一个开源的分布式版本控制系统,用于在软件开发过程中跟踪源代码的变化。
本文参考:
基础指令
在相关文件目录下,右键打开Git,其中Git Bash Here为命令行窗口,Git GUI Here为GUI界面,这里主要是针对命令行窗口。
1 |
|
1 |
|
工作区和暂存区
- 工作区(working directory)是本地电脑看到的一个目录,比如learngit文件夹,或者说是项目文件夹。
- 工作区中有.git隐藏文件夹,为Git的版本库,其中包括最重要的暂存区(stage/index)。Git会自动创建一个分支master,以及指向master的指针HEAD
- add操作是将文件添加到暂存区,commit操作将暂存区的所有内容提交到当前分支(仓库),push操作将本地仓库文件推送到远程仓库。
版本回退
1 |
|
管理修改
Git管理的是修改,而不是文件
使用add命令添加文件后,如果再次修改,此时提交是不包括第二次修改的。也就是说,每次修改之后都要add之后才能将修改提交到仓库。
撤销修改
想要撤销修改的话,要根据不同的情况采取不同的操作:
- 没有git add 时,使用
git checkout--<file>
命令,file修改后没有放到暂存区,使用此命令回到版本库状态;如果是添加到暂存区后再修改,使用此命令可以回退没修改时的状态。总之,checkout操作让文件回到最近一次commit或者add时的状态。 - 已经git add到暂存区,使用
git reset HEAD <file>
,将暂存区的修改撤销,重新放回工作区 - 已经commit到版本库,使用
git reset --hard HEAD^
回退版本,或者使用回退到指定commit id - 已经push到远程仓库,没救了:(
删除文件
使用rm <file>
指令或者其他方法删除文件后,工作区和仓库文件不一致,这时:
- 如果确定是删除文件,则继续下一步操作即可,
git commit -m 'xxx'
指令,提交删除,会删除仓库文件 - 如果是误删,此时仓库还有文件,使用
git checkout--<file>
恢复即可
添加远程库
在github上创建完仓库(repository)之后,在本地配置好之后,使用push指令可以将本地仓库到远程仓库。前提要求是本地仓库是git仓库,即有init初始化处理、commit等操作。此外,还需要Git配置好SSH环境,参考教程。
本地修改首先提交到本地仓库(无需Internet),然后push到远程:
1 |
|
从远程库克隆
SSH方式:
1 |
|
http方式:
1 |
|
http方式的速度比较慢,ssh方式速度比较快
分支管理
创建与分支合并
1 |
|
Git合并、删除、创建分支的速度非常快,鼓励用分支完成任务再合并,这样过程更安全
分支管理策略
分支合并时,Git优先用Fastforward模式,这种模式下,删除分支后,会丢掉分支信息。
如果强制禁用Fastforward模式,Git会在merge时生成新的commit,并且在分支历史记录可以看到分支信息:
1 |
|
团队开发中,master分支仅用于发布新版本,日常开发在各自的分支上。
2020.10.1起,github默认主分支改名为main,不再是master
bug分支
当在dev分支工作时,需要临时修复master上一个bug,需要创建临时bug分支,修复、合并,删除分支。
如果dev分支的工作未完成,可以使用$ git stash
命令保留现场。
1 |
|
Feature分支
项目中开发新功能/特征,最好用新的分支,每个功能一个feature分支,在上面开发,完成后,合并,最后删除feature分支。
如果feature分支还未合并,就需要删除掉,需要使用-D参数强行删除:
1 |
|
多人协作
多人协作的工作模式:
用
$ git push origin <branch-name>
推送自己的修改如果推送失败,则因为远程分支比自己的分支更新,需要使用
$ git pull
命令合并,此命令会自动合并,如果pull请求之后提示‘no stracking information’,说明本地分支和远程分支的链接关系没有创建,使用以下命令:
1 |
|
如果合并有冲突,则需要解决冲突,然后提交,push
如果没有冲突或者解决掉冲突后,则使用
$ git push origin <branch name>
推送到远程指定分支
命令总结:
1 |
|
Rebase
1 |
|
标签管理
标签(tag)也是版本库的一个快照,是指向某个commit的指针,tag比直接使用commit更方便。因此,可以使用tag作为版本号。
创建标签
1 |
|
标签不会随着push推送到远程仓库,使用以下命令将tag信息push到远程:
1 |
|
操作标签
1 |
|
- 本文作者:Kangshitao
- 本文链接:http://kangshitao.github.io/2020/10/31/git/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!