参考
Linux上传文件至GitHub
Linux学习系列(二十):在Linux系统中使用Git上传代码到GitHub仓库
Linux下使用git克隆github项目及文件上传
Linux/Ubuntu下使用git从Github拉取项目文件、提交修改后文件的完整流程演示
[Git]-Linux下的git操作
1、安装并绑定用户信息
// 安装
sudo apt install git
// 查看 git 版本
git version
// 绑定 Github 用户
git config --global user.email "email@example.com" //email@example.com 此处应写Github账号的注册邮箱
git config --global user.name "name" // name 此处应写 Github 账号的用户名
// 查看用户信息
git config --list
2、生成连接密钥
生成密钥,若添加密码则后续上传和克隆项目都需输入密码(不建议添加密码)
ssh-keygen -t rsa -C "YourEmail" // 生成ssh密钥文件
cat ~/.ssh/id_rsa.pub // 查看自己的ssh key(公钥)
cat ~/.ssh/id_rsa // 查看私钥
// 把私钥添加到本地ssh中
ssh-add 私钥位置
其中,id_rsa 为私钥,id_rsa.pub 为公钥。
将公钥复制(不要复制后面的邮箱),添加到自己的github账号上
- 打开并登录Github,点击头像,并依次点击 setting -> SSH and GPG keys -> New SSH key ,将密钥粘贴其中,并据自己需求设置密钥名称,最后点击 Add SSH key 即可
3、创建远程仓库
登录自己的github账号,新建仓库,添加或不添加README.md,根据需求,设置名称、权限等内容
4、使用github进行管理
1)初始化本地仓库
1.本地手动初始化仓库:
cd 目标文件夹
git init // 将该文件夹初始化为git仓库
// 设置 Git 的默认文本编辑器(VSCode or Vim),不设置也行
git config --global core.editor "code --wait --new-window"
git config --global core.editor "vim"
// 设置 Git 的默认分支名为 main
git config --global init.defaultBranch main
// 查看设置信息
git config --global --list
2.先创建好github仓库,再clone下来完成初始化
git clone HTTPS/SSH url // 直接clone一个已有的仓库
// 根据需要执行下面的语句
rm -rf .git // 删除原项目.git文件
git init // 仓库初始化
2)编辑文件
编辑本地项目文件或直接拖动文件到文件夹。
此时文件都在工作区。
分支操作:
- 主分支(main或master),代码在主分支里是完成的状态,是一切分支的起点和终点。一般保存经过测试的稳定代码。
- 建立新的分支,在其中实现新的功能或是完善之前的工程,这样在开发过程中就不会影响到之前完整的工程代码,待完成后,再向 main 分支发起合并请求。
git branch // 查看当前分支情况,其中*号标记的是目前工作的分支
// 创建分支
git branch <branchname> // 创建某个分支
git checkout -b <branchname> // 以当前分支为基础新建分支并切换至新分支
git checkout <branchname> // 切换至某个分支
git push origin main:develop // 在远程仓库origin的main分支下创建develop分支
// 合并分支,以当前工作的分支为主
git merge <branchname> // 合并分支
git merge --abort // 放弃本次合并
// 删除分支
git branch -d <branchname> // 删除分支
git push origin -d develop // 删除远程仓库origin的分支
git文件的颜色及含义:
- 红色,未加入版本控制; 远程clone到本地
- 绿色,已经加入版本控制暂未提交; (新增部分)
- 蓝色,加入版本控制,已提交,有改动; (修改部分)
- 白色,加入版本控制,已提交,无改动;
- 灰色:版本控制已忽略文件。
3)提交新文件到本地仓库
添加文件:添加文件到缓存区。
- 暂存区是git 的一个概念,类似发快递时再发到仓库之前先用一个盒子装起来,即缓存。
- 只有添加到暂存区中的文件才能被提交到 git 仓库
git add . // 添加全部文件
git add < file-name > // 添加具体某个文件
git add -A // -A表示提交所有
// 查看暂存区的文件情况
git status
提交文件:将缓存区的所有文件提交到本地仓库。
- 将所有已经暂存的修改内容保存到 Git 本地仓库中,并添加一条简要的提交消息以便于快速理解此次提交的更改内容
git commit -m "提交信息"
git log // 查看提交的版本记录
git reflog // 查看操作日志
历史记录:代码的commit历史会在文件夹里的隐藏文件夹 .git 里记录,通过git log可以查看。
显示的信息如下:
- commit id:哈希值,相当于本次提交的身份证号码,唯一标识,可以用于后续撤回
- 作者
- 日期
- commit时附带的信息
4)连接到远程仓库
一般使用 origin 作为远程 Git 仓库的别名,也可以自定义设置其他名字
// 两种连接方式,HTTPS和SSH
git remote add origin https://github.com/xxxxx/test.git
git remote add origin git@github.com:user/repo.git
// 两种连接方式的切换
git remote set-url origin https://xxx.git // 从ssh切换至https,后面接HTTP地址
git remote set-url origin xxx.git // 从https切换至ssh,后面接ssh地址
// 测试与github或者gitee(码云)有没有连通
ssh -T git@github.com //测试github 的命令
ssh -T git@gitee.com //测试gitee 也就是码云的命令
// 查看目前的句柄
git remote -v
// 移除目前的句柄
git remote rm origin
5)上传远程仓库
拉取更新:在上传代码到远程仓库之前,应该先将远程仓库更新的代码拉取到本地
- 当远端仓库发生更改之后,本地再提交代码的时候就会出现冲突的现象
- 两种更新方法:
- 运行 git fetch 来获取远程更新,然后运行 git merge 来合并这些更新到当前分支
- 运行 git pull 用于从远程存储库拉取更新并合并到当前分支。
// 1.
// 拉取远程更新
git fetch origin main // 拉取远程仓库的 main 分支
git fetch origin [分支名] // 拉取远程仓库的其他分支
git branch -a // 查看本地分支和远程跟踪分支
// 合并远程更新到当前工作的本地分支
git merge origin/main
// 2.
// 直接使用pull,相当于git fetch + git merge
git pull 远程仓库名 远程仓库分支名
- 其中白色为本地分支,红色为远程分支,绿色为当前的工作分支
上传:将本地仓库的修改上传到远程仓库
git remote -v // 确认当前关联的远程仓库
// 1.
// 直接上传
git push -u origin main // 把当前的本地分支上传到远程仓库origin的main分支,并将main分支设为其默认的上游分支
// 下一次提交就不用添加 -u 了,只需要在第一次提交时添加
// 2.
// 将本地分支关联到远程仓库的某个分支
git branch --set-upstream-to=origin/main master // 把本地分支master关联到远程仓库origin的main分支
git branch -vv // 查看本地分支与远程分支之间的关联信息
// 将远程分支合并到本地分支
git merge origin/main --allow-unrelated-histories // 当报错:fatal: 拒绝合并无关的历史时添加上参数--allow-unrelated-histories,以允许本地分支和远程分支具有不同的提交历史
// 提交上传
git push
- 上游分支:与本地分支相连的远程仓库的分支
6)文件的恢复
[Git]-Linux下的git操作
1.从本地仓库恢复文件到工作区
7)标签管理
8)临时工作区
9)可能出现的问题
(1)在第一次提交时,本地有其他文件,远程仓库中有README.md文件,push时会提示拒绝合并不相关的历史。
原因:Git认为你正在尝试合并两个没有共同祖先的分支,这通常意味着它们完全是不同的项目。
当 git pull 碰到拒绝合并无关历史
解决办法:在确保这次提交时正确的同时,强制执行它。参考
这个命令会尝试合并上游仓库的master分支的更改,即使这两个分支的历史记录完全不相关。然后,你可能需要解决任何合并冲突,然后提交合并。
请注意,这种合并可能会很复杂,并可能不是你想要的。如果你不确定,可能需要寻求额外的帮助或考虑其他解决方案来合并或同步这两个仓库。
git merge origin/main --allow-unrelated-histories // 强制合并