学会如何利用git来管理代码

前言

Git简单来说就是代码版本控制系统,通过他可以进行多人开发同一个项目然后讲每个人的代码块合并完成一个大项目,还能控制代码版本记录等。Git四个区域

  • 工作区:处理工作的区域(即做项目打代码的区域)
  • 暂存区:已完成的工作临时存放区域,等待被提交
  • 本地仓库:存放数据的地方,但是还在本电脑上,若电脑存储空间损坏还是会造成代码消失
  • Git远程仓库:最终的存放区域,即远程服务器,电脑存储空间损坏也不影响远程仓库数据

安装git:

sudo apt-get install git

一、本地仓库提交与代码回溯

(1)绑定用户名称和邮箱

# 查看配置
git config -l

git config --global user.name "XXXXX"
git config --global user.email "XXXXXXXXX@XXXX.com"

(2)创建git项目
在你的代码项目目录下init,会自动创建.git文件夹,用于存放git文件

git init

# 另一种方式是克隆已有的远程仓库,将远程服务器上的仓库完全镜像一份至本地
git clone 链接地址.git
# 例如:
git clone https://github.com/ZARDheart/CplusplusLearn.git

(3)把代码提交到仓库

# 放入暂存区
git add test.cpp
# 所有文件 放入暂存区
git add .
# 提交到(本地)仓库 -m 参数添加备注
git commit -m "This is a test."

设置忽略文件:在主目录下建立“.gitignore”文件,此文件有如下规则:

  • 空行或以井号(# )开始的行将会被忽略。
  • 可以使用Linux通配符。例如∶星号(*)代表任意多个字符,问号(﹖)代表一个字符,方括号([abc] )代表可选字符范围,大括号( {string1,string2……})代表可选的字符串等。
  • 如果名称的最前面有一个感叹号( !),表示例外规则,将不被忽略。
  • 如果名称的最前面是一个路径分隔符(/ ),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
  • 如果名称的最后面是一个路径分隔符(/ ),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。

例如以下这些实例:

touch .gitignore

# 填入:
*.txt   #忽略所有的.txt结尾的文件
!lib.txt  #但lib.txt除外
/temp  #进忽略项目根目录下的TODO文件,不包括其他目录temp
bulid/  #忽略bulid目录下的所有文件
doc/*.txt #会忽略doc/notes.txt 但是不包括doc/sever/arch.txt

(4)git log查看提交节点记录(包括节点名称、commit ID代码、提交人、提交日期和备注)

git log
# 查看具体修改哪些文件
git log --stat

(5)代码回溯

# 查看工作区和暂存区(add)的差异
git diff
# 查看之前的节点
git diff ${ID}
# 回溯
git reset --hard ${ID}
# 或
git checkout ${ID}

二、代码分支

# 查看分支,如果没有创建只有git自动创建的master,星标的是当前分支
git branch
#新建一个分支,但依然停留在当前分支
git branch 分支名
#新建一个分支,并切换到该分支
git checkout -b 分支名

# 创建分支develop(用于修改)
git checkout -b develop

# 将新分支合并到master(主程序,稳定版)
# 首先提交
git add .
git commit -m "test3"
# 切换到master分支
git checkout master
# 合并:将develop中新修改的内容添加/覆盖到master(当前分支)
git merge develop

三、提交到远程仓库(Github

测试ssh,在终端输入

ssh -T git@github.com

显示:

git@github.com: Permission denied (publickey).

这时候需要建立公钥

3.1 建立公钥

(1)在github上找到并点击settings,左边找到SSH keys and GPG keys并点击出现如下界面:
在这里插入图片描述
(2)New SSH Key,然后去终端获得密钥
在这里插入图片描述
(3)终端输入:

ssh-keygen -C "xx@xx.com" -f ~/.ssh/github

邮箱为自己创建github时用的邮箱,按两次Enter,出现如下代码:
在这里插入图片描述
(4)在终端输入代码cat ~/.ssh/github.pub,出现一大串公钥,将公钥复制到第(2)步的key里面,title随便写个名字即可,然后点击Add SSH Key
(5)在终端输入ssh -T git@github.com出现以下代码意味着该步骤完成(XXXXX为github帐号名称)

Hi XXXXX! You've successfully authenticated, but GitHub does not provide shell access.

3.2 将本地仓库与远程仓库同步

首先创建自己的本地仓库,以我学习C++的代码为例:

# 初始化
git init
# 所有文件 放入暂存区
git add .
# 提交到(本地)仓库 -m 参数添加备注
git commit -m "Learn code for C + +, unfinished version 12.15"

在这里插入图片描述

在个人主页的Repositories中New:
在这里插入图片描述
在如下界面中,Repository name填写同名的仓库名,这里是CplusplusLearn,下面可以输入项目描述以及是否公开
在这里插入图片描述
创建完成后下面有提示你提交方法:
在这里插入图片描述
回到终端,按照以下步骤即可push

git remote add origin https://github.com/ZARDheart/CplusplusLearn.git
git branch -M master
git push -u origin master

push的时候提醒输入Username还有PassWord,Username是指你github完整的邮箱地址,Password是指Personal access tokens,如何知道token呢?步骤如下:
在github的Settings/Developer Settings/Personal access tokens下Cenerate new token
在这里插入图片描述
设置token的有效期,访问权限等,要使用token从命令行访问仓库,请选择repo,要使用token从命令行删除仓库,请选择delete_repo,其他根据需要进行勾选
在这里插入图片描述
创建之后生成以下代码,复制下来保存,一旦离开这个界面就看不到了
在这里插入图片描述
然后重新提交,输入密码的时候直接复制(不会显示,直接回车)
在这里插入图片描述
成功提交,如果是公开的仓库,别人可以在https://github.com/ZARDheart/CplusplusLearn中看到了。我这是学习C++时使用的代码,可以参考

三、git命令对代码进行管理、拉取、安全提交

3.1 Clone远程仓库

# 克隆远程仓库,将远程服务器上的仓库完全镜像一份至本地
git clone 链接地址.git
# clone不同分支
git clone -b 分支名称 链接地址.git
# 例如:
git clone -b master https://github.com/ZARDheart/CplusplusLearn.git

3.2 在自己分支上修改代码

# 查看所有本地分支
git branch
# 查看所有远程分支
git branch -r
# 查看所有本地和远程分支
git branch -a

# 新建一个本地分支分支名,用于自己修改代码
git branch 个人分支名
# 切换本地分支
git checkout 个人分支名
# 上面两句u可以合成一句:新建一个分支,并切换到该分支
git checkout -b 个人分支名

# 推送到本地仓库
git add . 
git commit -m '描述内容'
# 把新建的本地分支推送到远程,远程就新建了一个分支
git push origin 个人分支名

# 如果在远程创建了新分支,本地可以通过git fetch 来获取最新的远程分支
git fetch

有了个人分支后,代码都在这个分支上修改,以防跟别人冲突。代码完成要提交到主分支的时候,再进行下面操作

3.3 将代码提交到远程主仓库

要先从远程主仓库拉取主分支分支最新代码,防止别人也推送了代码到远程主仓库,保持本地主仓库的代码是最新的,不然你提交的主仓库可能会覆盖掉别人提交的代码。

# 切换本地主分支
git checkout master # 或者main等
# 从远程主仓库拉取该分支最新代码
git pull --rebase origin master

再切换回自己分支,合并远程主仓库代码到自己的仓库
如果两个分支对同一文件进行了不同的修改,Git会执行三方合并来尝试自动合并这些修改,Git会比较两个分支相对于共同祖先的修改,并尝试将它们合并成一个新的文件状态:如果两个分支对同一文件的修改不冲突,Git会自动合并这些修改,创建一个新的合并提交。但如果两个分支对同一行代码进行了不同且冲突的修改,Git将标记这些冲突,并在合并时提示用户手动解决这些冲突。完成解决冲突后,可以提交这些已解决的文件,完成合并操作。

git checkout 个人分支名
#  合并远程主仓库代码到当前分支
git merge master

# 把本地分支推送到远程
git add . 
git commit -m '描述内容'
git push origin 个人分支名

如果开发完成,确认要更新到主仓库。再切换到远程主仓库,将自己的仓库的代码合并到远程主仓库,推送远程主仓库的代码,然后切换回自己的分支,继续开发。

# 切换本地主分支
git checkout master
# 合并本地分支到当前主分支
git merge 个人分支名
# 推送主分支到本地仓库
git add .
git commit -m '描述内容'
git push origin master
git checkout 个人分支名

3.4 删除git分支

# 删除本地分支
git branch -d <BranchName> 
# 删除远程分支
git push origin --delete <BranchName> 

提示如下截图错误信息:

To https://github.com/ZARDheart/CplusplusLearn.git
 ! [remote rejected] master (refusing to delete the current branch: refs/heads/master)
error: failed to push some refs to 'https://github.com/ZARDheart/CplusplusLearn.git'

删除指定的分支是当前默认分支,所以无法删除,在仓库的settings中将当前默认分支有master修改main(重新提交的),再次删除即可正常
在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐