Loading... ## 初始化设置 ### 配置用户名 ``` git config --global user.name "Your Name" ``` ### 配置邮箱 ``` git config --global user.email "mail@example.com" ``` ### 存储配置 ``` git config --global credential store ``` ## 新建仓库 ### 创建⼀个新的本地仓库(省略project-name 则在当前目录创建) ``` git init <project-name> ``` ### 克隆⼀个远程仓库 ``` git clone <url> ``` ## 工作区域 ### 工作区(Working Directory) 就是你在电脑⾥能实际看到的⽬录 ### 暂存区(Stage/Index) 暂存区也叫索引,⽤来临时存放未提交的内容,⼀般在.git ⽬录下的index 中。 ### 本地仓库(Repository) Git 在本地的版本库, 仓库信息存储在.git 这个隐藏⽬录中。 ### 远程仓库(Remote Repository) 托管在远程服务器上的仓库。 常⽤的有GitHub, GitLab, Gitee。 ## 文件状态 ### 已修改(Modified) 修改了但是没有保存到暂存区的⽂件 ### 已暂存(Staged) 修改后已经保存到暂存区的⽂件 ### 已提交(Committed) 把暂存区的⽂件提交到本地仓库后的状态 ## 文件名称 ``` main/master 默认主分支 Origin 默认远程仓库 HEAD 指向当前分支的指针 HEADA 上一个版本 HEAD~ 上四个版本 ``` ## 添加和提交文件 ``` git add <file ``` 添加⼀个⽂件到暂存区,⽐如git add . 就表示添加所有⽂件到暂存区。 ``` git commit -m "message" ``` 提交所有暂存区的⽂件到本地仓库 ``` git commit -am "message" ``` 提交所有已修改的⽂件到本地仓库 ## 删除 撤销 恢复 ```bash git mv <file><new-file> ``` 移动一个文件到新的位置。 ``` git rm <file> ``` 从工作区和暂存区删除一个文件,并且将这次删除放入暂存区。 ``` git rm --cached <file> ``` 从索引/暂存区中删除文件,但是本地工作区文件还在,只是不希望这个文件被版本控制。 ``` git checkout <file> <commit-id> ``` 恢复一个文件到之前的版本。 ``` git revert <commit-id> ``` 创建一个新的提交,用来撤销指定的提交,后者的所有变化将被前者抵消,并且应用到当前分支。 ``` git reset --mixed <commit-id> ``` 重置当前分支的HEAD为之前的某个提交,并且删除所有之后的提交。 ``` hard参数表示重置工作区和暂存区, soft参数表示重置暂存区, mixed参数表示重置工作区。 ``` ```bash git restore --staged <file> ``` 撤销暂存区的文件,重新放回工作区(git add的反向操作)。 ## git diff查看差异 ``` git status [-s] ``` 查看仓库状态,列出还未提交的新的或修改的文件。$-s$是查看简略模式 ``` git log --oneline ``` 查看提交历史,`--oneline`表示简介模式。 ``` git diff ``` 查看未暂存的文件更新了哪些部分。 ``` git diff <commit-id> <commit-id> ``` 查看两个提交之间的差异。 ``` git diff HEAD ``` 比较工作区与暂存区之间的关系 ``` git diff cached ``` 比较暂存区和版本库之间的关系 ``` git diff HEAD~ HEAD ``` 比较当前版本和上个版本 ``` git diff HEAD~x HEAD fil1 ``` 可以用来比较前x个版本和现版本的区别,后面添加文件名只会查看该文件的区别 ## .gitignore忽略文件 需要在git过程中忽略掉一些文件 ``` .git Git仓库的元数据和对象数据库 .gitignore 忽略文件,不需要提交到仓库的文件 .gitattributes 指向当前分支的指针 .gitkeep 使空目录被提交到仓库 .gitmodules 记录子模块的信息 .gitconfig 记录仓库的配置信息 ``` ``` .gitignore *.log //忽略某种文件 temp/ //忽略文件夹,后面是以/结尾的 ``` 就起到了忽略所有log结尾的文件,如果已经被提交到了版本库中忽略是没有作用的,需要从暂存区删除,需要仅仅将远程库中删除则使用`git rm xxx --cached` > 如果一个文件夹下无文件不会被添加至仓库 ### gitignore文件的匹配规则 - 空行或者以#开头的行会被Gt忽略。一般空行用于可读性的分隔,#一般用作注释 - 使用标准的Blob模式匹配,例如: 星号*通配任意个字符 问号?匹配单个字符 中括号[]表示匹配列表中的单个字符,比如:[abc]表示a/b/c - 两个星号**表示匹配任意的中间目录 - 中括号可以使用短中线连接,比如: [0-9]表示任意一位数字,[a-z]表示任意一位小写字母 - 感叹号!表示取反 ``` #忽略所有的.a文件 *.a #但跟踪所有的lib.a,即便你在前面忽略了.a文件 !lib.a #只忽略当前目录下的TODO文件,而不忽略subdir/T0D0 /TODO #忽略任何目录下名为build的文件夹 build/ #忽略doc/notes.txt,但不忽略doc/server/arch.txt doc/*.txt #忽略doc/目录及其所有子目录下的.pdf文件 doc/**/*.pdf ``` [常用忽略模板](https://github.com/github/gitignore) ## SSH配置 1. 命令行输入`ssh-keygen`,一路回车,如果要重新生成别的密钥,请注意修改,并且在某些指定程序修改识别密钥 如果更换了名称,则需要在`.ssh`文件夹创建`config`文件,当我们使用`github`过程中就会验证test这个密钥 ``` # github Host github.com HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/test ``` 2. 右上角头像的**setting** 3. 页面左侧**SSH and GPG keys** 4. 页面中间**New SSH key** 5. 将`xxx.pub`输入到`ssh`对话框 ### 同步到远程仓库 ``` git push ``` ### 拉取到本地仓库 ``` git pull <remote> ``` ### 克隆仓库 ``` git clone repo-address ``` ## 关联远程仓库和本地仓库 ### 添加远程仓库 ``` #Step 1 git remote add <远程仓库别名> <远程仓库地址> #Step 2 git push -U <远程仓库名> <分支名> ``` 在github创建一个仓库 点上方的ssh并将代码复制到本地的终端运行 ``` git remote add origin git@github.com:geekhall-laoyang/first-repo.git git branch -M main //指定分支名称 git push -u origin main:main //本地main分支与远程main分支关联,前面的是本地,后面的是远程 ``` ### 查看远程仓库 ``` git remote -v ``` ### 拉取远程仓库 ``` git pull <远程仓库名><远程分支名>:<本地分支名> ``` 相同可以省略冒号后面的 ## 分支操作 - 查看分支列表: ``` git branch ``` - 创建分支: ``` git branch branch-name ``` - 切换分支: - ``` git checkout branch-name ``` - ``` git switch branch-name ``` - 较为推荐第二种 - 合并分支 ``` git merge branch-name ``` - 删除分支: - [已合并] - ``` git branch -d branch-name ``` - [未合并] - ``` git branch -D branch-name ``` ## 合并 ### 合并步骤 > 在提交命令加上-a参数即可同时完成暂存和提交两个操作 1. 切换到要被合并的分支 2. 输入`git merge xxx`,xxx为要合并进来的分支 3. 使用`git status`查看冲突文件 4. 使用`git diff`查看冲突内容 5. 手动编辑冲突文件后再次提交 ### 解决合并冲突 - 两个分支未修改同一个文件的同一处位置:Gt自动合并 - 两个分支修改了同一个文件的同一处位置:产生冲突 - 解决方法: - Step1-手工修改冲突文件,合并冲突内容 - Step2-添加暂存区`$ git add file` - Step3-提交修改`$ git commit -m "message"` - 中止合并:当不想继续执行合并操作时可以使用下面的命令来中止合并过程:`$ git merge --abort` ## rebase ``` git rebase dev ``` 例如这个指令就会将dev合并到当前分支,`rebase`的作用就是把命令中的分支合并到当前位于的分支  - 如果当前在`main`分支,执行`git rebase dev`后  - 如果当前在`dev`分支,执行`git rebase main`后  ### 分支管理和工作流模型  ### 版本号规则 - 主版本(Major Version):主要的功能变化或重大更新; - 次版本(Minor Version):一些新的功能、改进和更新,通常不会影响现有功能; - 修订版本(Patch Version):一些小的bug修复,安全漏洞补丁等。通常不会更改现有功能和接口。 ### 分支命名 推荐使用带有意义的描述性名称来命名分支 - 版本发布分支/Tag示例:v1.0.0 - 功能分支示例:`feature-login-page` - 修复分支示例:`hotfix-#fissueid-desc` ### 分支管理 - 定期合并已经成功验证的分支,及时删除已经合并的分支 - 保持合适的分支数量 - 为分支设置合适的管理权限 最后修改:2023 年 11 月 25 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏