git是一个版本管理工具。是一个分布式的版本控制系统,与svn集中式相比,它没有中央服务器。每台个人电脑就是一个版本库,每个开发人员提供自己的修改代码到共享版本库(也称作远程仓库)中即可。
远程仓库和本地版本库的内容是一模一样的。svn则必须连接到服务器上才能完成代码的提交和修改。
Git常用命令流程
由Git
常用命令流程图所示,可以看到右下角有一个本地仓库的闭环。先是创建本地仓库,本地仓库创建好了之后,就可以在里面添加代码,之后代码放入工作区,如果想把代码加入到本地仓库中去的话,先需要将其放入暂存区,之后通过commit
将其提交到本地仓库中去。若想再修改,还可以把它checkout
下来,这样就形成了一个本地的闭环。
当需要与别人协作的时候,我们将本地仓库复制一份到远程仓库即可(push
)。其他开发人员可以clone
一份到自己的本地仓库即可。
如果想拿到别人更改后的代码,将其pull
下来就可以。
Git安装
使用本地版本库
创建
建立本地仓库时需要一个空的文件夹,之后在这个文件夹下初始化即可:
git init • 1
创建完成之后会生成一个隐藏文件夹.git
。到此就创建好了本地仓库。一旦创建了一个本地仓库,默认就会带上一个分支,这个分支叫主分支(master
)。
添加文件到暂存区
.git
叫做本地版本库,包含.git
的文件目录叫做工作目录。如果想要在本地仓库中添加一个文件的话,这个文件必须要在工作目录下面。
通过git status
命令用于查看项目的当前状态。
git status • 1
如果新建一个文件在此目录下,我们可以将其添加到暂存区(并非本地仓库)中。
git add XXX.cpp/readme.md等 • 1
除此之外还可以:
git add . 将当前目录下修改的所有代码从工作区添加到暂存区 . 代表当前目录 • 1
手动为本地仓库取一个origin
的别名:
git remote add origin https://github.com/XXX.git • 1
添加文件到本地仓库
添加到暂存区之后可以通过commit
提交到本地仓库。此处提交需要写日志。到此文件就已经添加到本地仓库中去了。
git commit -m "first commit" • 1
范式为:
git commit -m ‘注释’ 将缓存区内容添加到本地仓库 • 1
Git 为你的每一个提交都记录你的名字与电子邮箱地址,所以第一步需要配置用户名和邮箱地址。
git config --global user.name 'runoob' git config --global user.email test@runoob.com
修改文件
若文件有修改,我们需要先提交到暂存区,之后再提交到本地仓库。
删除文件
要从Git
中移除某个文件,就必须要从已跟踪文件清单中移除,然后提交。可以用以下命令完成此项工作
git rm <file> • 1
如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f
:
git rm -f <file> • 1
删除版本库中的文件,但本地保留此文件。
git rm --cached <file> • 1
当执行 git rm --cached <file>
命令时,会直接从暂存区删除文件,工作区则不做出改变。
当执行 git checkout .
或者 git checkout -- <file>
命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
GitHub上创建仓库
在实际开发过程中,我们需要多个人操作同一个代码,因此需要远程仓库。
Github
上面创建仓库直接界面化操作就可以了。创建好之后我们就有了一个远程仓库。
远程仓库建立好之后,我们需要建立一个本地仓库和远程仓库的一个连接。
git remote add origin https://XXX/XXX.git • 1
其中的origin
是一个通用的叫法,代表是哪个远程仓库。也可以取名origin1
等。
本地代码推送到远程仓库
git push
的一般形式为 git push <远程主机名> <本地分支名> <远程分支名>
:
git push -u origin master • 1
将本地的文件推送到远程服务器即可。第二次提交使用时,如果还是提交到原来的库,可以直接用git push
,不需要重新git remote add ...
,再git push...
,如果代码更新也可以用上面的步骤。
如果远程仓库已经有了的话,直接建立连接,然后push
就可以了。
创建ssh密钥及在Github上配置公钥
- 生成本地密钥
ssh-keygen -t rsa -C "注册Github用的邮箱" • 1
生成完之后通过以下命令获得一串密钥
cd ~/.ssh cat id_rsa.pub
然后拿着这一串密钥到GitHub
主页 SSH and GPG keys
添加New Key
。
推送修改的文件及冲突解决
不能说每次都推送全部的文件,我们修改了那个文件就推送哪个文件就可以了。
在拉取和推送的时候经常会遇到冲突的问题。意思就是当另外一个用户更新了服务端的代码,而你本地的代码不是最新的,再次做修改之后是无法推送上去的。所以我们需要将远端的拉取下来,然后对比所修改的文件,之后进行手动修改。
更新最新版本:
git pull origin master • 1
分支管理
当你执行 git init
的时候,默认情况下 Git
就会为你创建 master
分支(现在这个分支变成了main
)。
创建分支命令:
git branch (branchname) • 1
没有参数时,git branch
会列出你在本地的分支。
切换分支命令:
git checkout (branchname) • 1
删除分支命令:
git branch -d (branchname) • 1
分支合并
一旦某分支有了独立内容,你终究会希望将它合并回到你的主分支。 你可以使用以下命令将任何分支合并到当前分支中去:
git merge (branchname) -m "xxx" • 1