Git指令
创建仓库
初始化本地仓库
根据自己的需要进入对应的目录下初始化一个本地仓库1
git init
克隆远程仓库
克隆一个已存在的远程仓库1
git clone <remote_repo_URL>
基本配置
设置用户名和邮箱地址(在该设备上第一次使用Git时)
这里的用户名和邮件地址就是自己github账号的用户名和邮箱地址1 2
git config --global user.name <user name> git config --global user.email <user email>
查看本地仓库与远程仓库的关联情况
可以查看到当前仓库的关联情况1
git remote -v
关联指定的远程仓库
将本地仓库与指定地址的远程仓库关联1
git remote add origin <remote_repo_URL>
查看更改
查看工作目录与暂存区中的文件状态
当发生文件更改(如内容修改,增删等)时,此指令可以用来查看发生更改的文件。1
git status
查看当前更改与之前提交的差异
对比当前内容与之前提交中不同的地方1
git diff
查看提交历史
查看过往的提交历史1
git log
分支相关
创建分支
创建一个新分支1
git branch <branch_name>
创建一个新分支,并切换到该分支
1
git checkout -b <branch_name>
查看分支
查看所有本地分支1
git branch
查看所有本地和远程分支
1
git branch -a
切换分支
切换到指定分支1
git checkout <branch_name>
删除分支
删除已合并的本地分支1
git branch -b <branch_name>
强制删除指定本地分支
1
git branch -D <branch_name>
删除指定远程仓库分支
1
git push origin --delete <remote_branch_name>
合并分支
将指定分支合并到当前分支1
git merge <branch_name>
提交相关
添加本地文件至暂存区
第一行表示将当前目录下所有未被跟踪的文件都添加至暂存区,第二行表示将指定路径的文件添加至暂存区(可以添加多个)1 2
git add . git add <file_path>
提交暂存区文件至本地仓库
message
表示对于此次提交内容的简要说明1
git commit -m "message"
保存当前工作目录的临时状态
保存当前工作目录的临时状态,以便切换到其他分支进行工作1
git stash
重新获取之前暂存的临时状态
1
git stash pop
推送与拉取
将本地仓库推送至远程仓库
当本地分支名与远程相同时可以省略冒号后的部分,如果不相同则使用第二行的指令。1 2
git push origin <local_branch> git push origin <local_branch>:<remote_branch>
例:本地分支名与远程分支名都为
main
,则使用1
git push origin main
例: 本地分支名为
master
, 远程分支名为main
, 则使用1
git push origin master:main
如果在本地分支上已经设置了上游分支(通常是在从远程仓库拉取或克隆分支,并且执行过一次推送后)则可以省略push后的部分
1
git push
从远程仓库拉取分支到本地并合并
通常情况下,拉取远程仓库分支时上游分支已存在,如果只需要拉取并合并到本地当前所在的分支时,直接使用git pull
即可1
git pull
当需要拉取其他远程分支的更新时,则需要额外指定远程分支名
1
git pull origin <remote_branch>
当需要拉取其他远程分支的更新到其他本地分支时,则需要额外指定远程分支名和本地分支名
1
git pull origin <remote_branch>:<local_branch>
Git提交信息规范
Git提交信息(commit message)规范对于维护项目的历史记录、理解和查找特定变更非常重要。一个良好的提交信息可以帮助团队成员更好地理解代码变更的背景。Angular提交信息规范是一个被广泛采用的规范,其提交格式如下:
1
2
3
4
5
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
每次提交可以包含页眉(header)、正文(body)和页脚(footer),其中页眉必须有实际的内容。关于页眉中的提交信息:
type: 用于说明commit的类别,常用的有以下几种:
类别 含义 feat 添加新功能 fix 修复bug docs 文档变更 style 不会影响代码含义的编码风格上的更改 refactor 重构(既不修复bug也不增加新功能的代码更改) test 添加缺失的测试或更正现有的测试 chore 日常、例行工作,不涉及新功能添加、bug修复和代码重构的提交 perf 提高性能的代码优化 build 影响构建系统或外部依赖项的更改 - scope: 提交内容的影响范围
- subject: 对于提交内容的简短描述,通常不超过50个字符。此外,考虑到可能或已经存在的团队协作需要,应尽可能使用英语。提交内容为英语时,使用第一人称现在时,首字母小写,结尾不加句号。
详细文档参考:
Git的状态模型
常用的一些git指令以及其作用的对象和效果:
个人心得
最初的一些尝试
本人开始使用Git进行代码版本管理的主要目的是为了在多个设备上同步研究所需的代码,并且希望后续能够不断地进行完善。在了解了上述的一些基础的Git指令后本人便开始了一些尝试,但随即便遇到了一些问题。
最初的项目文件夹的内部结构是包含了多个子文件夹,其中一个文件夹内包含了各种用于分析的实验数据。我的需求是将本地项目文件夹中不包含数据的部分(可能涉及到实验参与人员的隐私)上传到GitHub的远程仓库,并且希望在别的设备上也能关联到远程仓库进行代码的同步管理。我尝试了一些方法,诸如在各个设备上的项目文件夹内建立本地仓库,然后关联到同一个远程仓库(其实应该是可行的),但是由于最初的认知比较粗放,研究了半天也没能成功。当时的思路限死在如何在一台设备上将项目文件夹内的部分文件上传到远程仓库,并且在其他设备上同步远程仓库的内容并覆盖到该设备上对应的项目文件夹内这件事上了。
后来经过思考发现完全可以在一个设备上把要上传的内容重新整理好,然后只将需要上传的部分上传至远程仓库。随后在其他设备上把远程仓库克隆至本地,最后再将未上传的数据部分重新加入这个克隆过来的仓库即可。这样不管在哪个设备上都可以正常运行之前的代码了。仔细想想其实是一个很简单的问题,但是由于一开始对于Git指令的应用没有经验,同时思路也因此被限制从而导致进展不顺。如果是建立了多个仓库关联至远程的话,用pull应该也能实现我的需求,毕竟与克隆类似都是从远程仓库获取内容至本地仓库。
关于add和commit
之前在还不太了解这两个指令的具体效果时做出了一些错误的操作。比如将本地仓库中的内容上传至远程仓库时无脑使用了git add .
,随后直接commit + push。这导致一些过大的文件也被加入了上传列表,但是由于GitHub并不支持过大文件的上传,以及commit后无法将这些文件移除,最后不得不删除了整个本地仓库。如果是已经add了但是没有commit,则可以使用git rm --cached <file/path>
来删除暂存区中被误传入的内容,但一旦commit事情就会变得麻烦了。不过这个删除的行为目前感觉最好不要随意使用,或者说初次add后直接使用或许问题不大,但是如果有过修改的记录则可能会产生一些冲突需要手动解决??(目前还不太了解具体的原理)