在本地创建Git仓库非常简单,只需要在命令行中进入要作为仓库的目录,然后执行以下命令:
git init
这样就会在当前目录下创建一个空的Git仓库,这个时候会在仓库目录下多了一个.git
目录,.git
目录里由很多关于git管理的文件,这里面的东西我们不用管。
有了仓库之后,就可以使用git add和git commit像仓库中添加要跟踪的文件,和提交修改的内容了。
GitHub是一个非常流行的代码托管平台,可以在上面创建公开或私有仓库来管理代码。创建仓库的步骤如下:
创建成功后,可以通过Git命令将本地代码上传到GitHub仓库中。
GitLab是另一个流行的代码托管平台,也可以在上面创建公开或私有仓库来管理代码。创建仓库的步骤如下:
创建成功后,可以通过Git命令将本地代码上传到GitLab仓库中。
它用于将工作目录中的文件和修改添加到Git暂存区中,准备提交到Git仓库中。Git add命令的作用是将修改的代码标记为“已修改”,以便后续提交到Git仓库中。
Git add命令有以下几种使用方式:
git add <file>
其中,
git add hello.txt
git add <file1> <file2> ...
可以同时添加多个文件,例如:
git add hello.txt world.txt
git add .
或
git add *
这个命令会将当前目录下的所有文件添加到Git暂存区中。
这两者的区别在于:
git add .
只会将当前目录下的所有文件和文件夹添加到暂存区,不包括以.
开头的隐藏文件。git add *
会将当前目录下的所有文件和文件夹添加到暂存区,包括以.
开头的隐藏文件。因此,在使用 git add 命令时,推荐使用git add .
,以避免不必要的文件和文件夹被添加到暂存区。
git add <directory>
可以添加某个目录下的所有文件,例如:
git add src/
需要注意的是,执行git add命令只会将修改的代码添加到Git暂存区中,还需要执行git commit命令将修改的代码提交到Git仓库中。如果不执行git commit命令,暂存区中的修改将不会保存到Git仓库中。
总之,Git add命令是Git版本控制系统中非常重要的一个命令,它可以帮助开发者有效地管理代码修改记录,保证代码的可追溯性和可维护性。
它用于将本地工作目录中的修改记录提交到本地仓库中。在执行git commit命令时,需要指定提交的信息,这个信息通常包括修改的描述和作者等信息,同时可以添加一些标签和注释。
Git commit命令的使用方法如下:
git commit -m "commit message"
其中,-m选项用于指定提交的信息,可以是任意文本,但最好是简明扼要的描述。执行完该命令后,Git会将所有已经暂存的修改记录提交到本地仓库中,并生成一个唯一的提交ID。这个ID可以用来查看提交记录、回滚修改等操作。
除了-m选项外,还可以使用其他选项来指定提交的内容、作者、时间等信息,例如:
git commit -a -m "commit message" # 提交所有已经跟踪的文件
git commit --amend -m "new commit message" # 修改最近一次提交的信息
总之,Git commit是Git版本控制系统中非常重要的一个命令,它可以帮助开发者有效地管理代码修改记录,保证代码的可追溯性和可维护性。
在 Git 中,有三个重要的概念:工作区、暂存区和仓库。
Git 的工作流程是这样的:我们在工作区中添加、修改、删除文件,然后使用 git add 命令将修改的文件添加到暂存区,最后使用 git commit 命令将暂存区的文件提交到仓库中。这样,我们就可以在仓库中保存我们的项目版本,并可以方便地进行版本控制和管理。
创建一个文件夹,并且在文件夹内使用:
git init --bare
这样我们就在服务器上创建了一个裸仓库,下面简单介绍一下裸仓库:
裸仓库就是一个没有工作区的仓库,它只包含 Git 数据库中的版本信息,没有实际的文件内容,因此也不支持进行文件修改和提交操作。它通常用于搭建远程服务器,用于代码的共享和管理。
裸仓库与普通的 Git 仓库不同之处在于,它没有工作区,因此不包含项目实际的文件内容,只包含 Git 数据库中的版本信息。这使得裸仓库更加轻量级,占用空间更小,同时更加适合用于多人协作开发和代码共享。
使用git init --bare
命令创建裸仓库时,需要指定一个目录作为仓库的存储路径。执行完该命令后,Git 会在指定的路径下创建一个裸仓库,并在其中生成一些必要的文件和目录,如 HEAD、refs、objects 等。此时,裸仓库已经可以被其他开发者克隆和拉取代码。
在使用裸仓库时,通常需要进行以下操作:
裸仓库的使用需要谨慎,因为它没有工作区,所以不支持进行文件修改和提交操作。同时,裸仓库中的所有操作都是针对 Git 数据库的操作。
首先我们需要使用 SSH 协议进行操作,步骤如下:
生成 SSH 密钥:使用 ssh-keygen 命令生成 SSH 密钥,命令格式为:
ssh-keygen -t rsa -C "[email protected]"
其中,-t 参数表示密钥类型,这里使用 RSA;-C 参数表示注释,可以填写个人邮箱地址,也可以忽略不填。
将公钥添加到远程服务器:将生成的公钥(默认存储在 C:/Users/[用户名]/.ssh/id_rsa.pub 文件中)添加到远程服务器中,以便进行认证,存储在服务器的~/.ssh/authorized_keys中。
配置 SSH 代理:使用 ssh-agent 命令启动 SSH 代理,并将生成的私钥添加到代理中,命令格式为:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
这样可以避免每次进行 Git 操作时都需要输入密码。
在 Git 中使用 SSH 协议:在 Git 中使用 SSH 协议进行操作时,需要将远程服务器的地址改为 SSH 协议的地址,格式为:
git ssh://<user_name>@<server_address>:<repository_path>
其中,server_address 表示远程服务器的地址,repository_path 表示仓库的路径。
例如将服务器中的仓库克隆下来:
git clone ssh://root@<server_address>:/root/learn-git
在使用 SSH 协议进行操作时,需要注意保护好私钥,避免泄露。同时,如果无法通过 SSH 协议进行操作,可以尝试使用 HTTPS 协议进行操作。
git config 是 Git 中用于设置和读取配置信息的命令,可以用于设置 Git 的全局或局部配置、读取 Git 的配置信息等。
常用的 git config 命令包括:
git config --global user.name "your_name"
:设置 Git 的全局用户名。git config --global user.email "[email protected]"
:设置 Git 的全局邮箱地址。git config --global core.editor "your_editor"
:设置 Git 的全局文本编辑器。git config --global color.ui true
:启用 Git 的全局颜色输出。git config --list
:列出 Git 的所有配置信息。git config --unset key
:删除 Git 的指定配置信息。git config --unset-all key
:删除 Git 的所有指定配置信息。其中,–global 参数表示全局配置,即该配置适用于当前用户的所有 Git 仓库。如果不使用 --global 参数,则表示局部配置,只适用于当前仓库。
可以通过以下命令来查看 Git 的配置信息:
git config --list
输出结果包含 Git 的所有配置信息,包括用户名、邮箱地址、文本编辑器、颜色输出等。如果需要修改配置信息,可以使用 git config 命令重新设置即可。
前两个用户名跟邮箱地址是必须要进行配置的,它会显示在每次提交中。
因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)
在Git中,可以使用git status
命令查看当前文件的状态,其中红色表示文件被修改但未暂存,绿色表示文件已经被暂存但未提交,而没有颜色表示文件没有修改。通过这些状态,我们可以清楚地了解文件的变化情况,方便我们进行版本控制。
git rm
移出版本库,则成为Untracked文件git checkout
则丢弃修改,返回到unmodify状态,这个git checkout即从库中取出文件,覆盖当前修改git commit
则将修改同步到库中,这时库中的文件和本地文件又变为一致,文件为Unmodify状态git rm
命令可以用于将文件从Git仓库中删除。它有两种用法:
git rm
:将指定文件从Git仓库中删除,并将删除操作添加到暂存区中。
git rm --cached
:将指定文件从Git仓库中删除,但是不删除本地文件,只将删除操作添加到暂存区中。
使用git rm
命令删除文件后,需要通过git commit
命令提交暂存区中的修改,才能将文件从Git仓库中彻底删除。
需要注意的是,如果删除的文件已经被其他人修改并提交到了仓库中,那么在你的本地使用git rm
命令删除该文件后,再将修改推送到远程仓库时会产生冲突。此时需要通过合并操作解决冲突。
git checkout
命令可以用于切换分支、回滚代码和撤销修改。它有以下几种用法:
切换分支:git checkout
,将当前工作目录切换到指定的分支。
回滚代码:git checkout
,将当前工作目录中的所有文件回滚到指定的提交版本。
撤销修改:git checkout --
,将指定文件恢复到最近一次提交的状态。
创建新分支:git checkout -b
,创建一个新的分支并切换到该分支。
需要注意的是,使用git checkout
命令切换分支或者回滚代码时,会清空当前工作目录中的所有未提交的修改。如果需要保存修改,需要先将修改暂存或提交到仓库中。
git commit file1.name file2.name file3.name .. –m “commit messages”
:commit指提交修改到本地的仓库里,file*.name
指的是带commit
的文件 –m
后面的内容指提交的信息,即备注git commit –a –m “commit messeages”
:添加的-a
参数会把当前暂存区里所有的修改(包括删除操作)都提交,但是那些尚未添加到暂存区的内容是不会提交的,网上有很多的博客内容说-a
参数会把尚未add的文件也提交了,这个说法是错误的。git commit
:我们可能由时候手抖忘记输入-m
参数,直接输入了git commit
,于是出现了下面这个界面,即打开了一个vim编辑界面,敲入“i”键后保存,输入要添加的message后,输入“ESC”按键退出编辑界面,然后再敲入“:wqa”后会保存message内容,并且提交此次修改,如果敲入“:q”会取消这次提交。git commit --amend
:这也是我们经常用的命令,他会把此次提交追加到上一次的commit内容里。Angular 团队制定了一系列规范,以帮助开发者更好地使用 Git 进行 Angular 项目的开发。以下是其中的一些规范:
每次提交代码时,需要遵循以下格式:
():
除了空白行
,其余的三个分别对应:
():
标题行,必填, 描述主要修改类型和内容
:主题内容,描述为什么修改, 做了什么样的修改, 以及开发的思路等等
:页脚注释,放 Breaking Changes 或 Closed Issues其中,type 表示提交类型,可以是:
scope表示commit 影响的范围,即影响的模块或者组件,比如: route, component, utils, build…
subject表示commit 的概述, 建议符合 50/72 formatting
body表示commit 具体修改内容, 可以分为多行, 建议符合 50/72 formatting
footer表示一些备注, 通常是 BREAKING CHANGE 或修复的 bug 的链接,或者feature等等其余的信息
Angular 团队采用 SemVer(语义化版本号)规范,即 MAJOR.MINOR.PATCH,其中:
每次提交合并请求时,需要遵循以下格式:
[()]:
其中,type、scope、subject 与提交信息规范相同。
以上是 Angular 团队制定的一些规范,遵守这些规范可以提高团队协作效率,降低代码维护成本。
还可以使用git cmmit模板来规范提交
在~/.gitconfig
文件里添加
[commit]
template=~/.gitmessage
添加~/.gitmessage文件。例如,一个提交信息可能如下所示:
feat(login): add remember me feature
Add a remember me checkbox on the login page to allow users to stay logged in between sessions.
Fixes #123
这个提交信息中的
为 feat,表示新增功能,
为 login,表示影响的范围为登录模块,
为 add remember me feature,表示简要描述为新增记住我功能。 描述了详细的修改内容,
中的 Fixes #123 表示关联了 issue #123。
git push命令用于将本地分支的更新,推送到远程主机。它的格式与git pull命令相仿
git push <远程主机名> <本地分支名>:<远程分支名>
注意,分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。例如:
git push origin master:refs/for/master
如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建:
git push origin master
上面命令表示,将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。
如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支:
git push origin :master # 等同于 git push origin --delete master
上面命令表示删除origin主机的master分支。
如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略:
git push origin
上面命令表示,将当前分支推送到origin主机的对应分支。
如果当前分支只有一个追踪分支,那么主机名都可以省略:
git push
除了上述基本用法外,Git push 命令还有一些其他的选项,例如:
--force
:强制推送本地分支,即覆盖远程分支;--tags
:推送本地标签到远程代码库;--all
:推送本地所有分支到远程代码库。需要注意的是,git push
命令会将本地的提交推送到远程代码库中,因此推荐在推送前先将本地代码库中的修改提交到本地仓库中。
要查看当前所有分支,可以使用以下命令:
git branch
这将列出所有本地分支,当前分支前会有一个星号。
如果要查看远程分支,可以使用以下命令:
git branch -r
这将列出所有远程分支。
如果要查看本地与远程分支,可以使用以下命令:
git branch -a
这将列出所有本地和远程分支。
产生冲突的情况通常是因为本地分支和远程分支的代码不一致,导致无法直接合并。具体情况如下:
当发生冲突时,Git 会提示用户进行手动解决冲突。用户需要根据提示对冲突进行解决,然后再次提交代码。如果多个人同时修改了同一个文件的同一部分,那么需要协商好谁来解决冲突,或者每个人都在自己的本地分支上解决冲突,然后再合并到主分支上。
git解决冲突的步骤如下:
保存修改后的文件
执行git add
命令,把修改后的文件添加到暂存区
执行git commit
命令,提交修改
执行git push
,提交到远程仓库
如果在执行git commit
命令时,出现类似如下的提示:
Automatic merge failed; fix conflicts and then commit the result.
说明还有未解决的冲突,需要继续解决冲突,重复上述步骤,直到所有冲突都解决完毕。
如果不想解决冲突,可以使用git merge --abort
命令取消合并。