Git
linux上安装Git
sudo apt update
sudo apt install git
Git Bash:与linux风格接近,使用最多,推荐
Git CMD:windows风格
Git GUI:图形界面,不推荐
查看配置
git config -l :查看所有配置
git config --global --list 查看用户配置的
git config --system --list :系统配置的
核心原理
index是暂存区
respository 是本地代码仓库,保存着本地的各个版本代码
remote是远程仓库,通常是github/gitee码云
如何克隆别人已有的项目
- 获取项目地址http
- 打开本地文件系统,选择你需要保存项目的位置并打开cmd
- git clone xxx,这个过程可能需要验证身份,输入用户名密码
如何将本地仓库与远程仓库连接?从零开始
法1:
-
首先在Github上新建一个代码仓库,拷贝地址 eg:https://github.com/zhangww-web/JianShu.git
-
在你本地文件夹下鼠标右键git bash here
-
git init 新建本地仓库,生成.git隐藏文件,点进去有head文件。
-
git remote add origin url,可以绑定远程仓库
- 继续输入git pull origin master(若你远程仓库为空,不需要这一步)
- git add .(.表示所有的,注意这个‘点’)—将本地文件提交至暂存区
- git commit -m '提交信息'
- git push origin master
法2:
第2种方法比较简单,直接用把远程仓库拉到本地,然后再把自己本地的项目拷贝到仓库中去。然后push到远程仓库上去即可。要求远程仓库为新建的空仓库!!!
-
在空文件夹中git bash here(不用init!)
-
首先git clone https://github.com/zhangww-web/JianShu.git
-
然后复制自己项目的所有文件到刚刚克隆下来的仓库中
-
git push -u origin master
法3:在android studio中集成
- 配置Git
- 关联自己的github
对于任何安卓项目,前两步都是通用的!!!
这里的Remote填远程仓库地址,eg: https://github.com/zhangww-web/JianShu.git
IDEA
方法类似,先init本地仓库,
点击顶部菜单栏的 Git -> Manage Remotes
。
如果Share project on github一直失败,可以这样: 前面步骤不变,现在去github上新建一个空白仓库,获得一个remote url,然后本地仓库提交到该空白仓库,即可建立链接。
迁移代码仓库
法一(推荐):访问令牌(Access Token)获取:点击右上角头像,选择“Settings”(设置)。
在左侧菜单中找到“Developer settings”(开发者设置),然后点击“Personal access tokens”(个人访问令牌)。点击“Generate new token”(生成新令牌),按照需要选择相应的权限(通常建议勾选 repo、read:org 等,根据你的实际需求)。生成后将令牌复制下来,填入 Gitea 的迁移界面中。
直接推完整git信息,推荐
法二:
本地有完整的代码已经git提交记录,不想丢失,推送到新的远程仓库:
在本地文件夹下git bash here
git remote add origin <新仓库地址>
git push -u origin --all
注意:只会将你本地仓库已经 checkout 出来的所有分支(即本地存在的分支)推送到新远程仓库中。
Git 常用命令
提交代码
git add--> git commit --> git push
git add . 提交所有文件到暂存区,此时git status显示changes to be commited
git commit -m "describe描述性内容" 提交到本地仓库
分支操作
git banch -a 可以查看所有分支
git branch dev 可以新建dev分支
git checkout dev 可以切换到dev分支
git branch -d dev 删除dev分支
git branch -m dev cs :将dev分支修改名称为cs分支
push失败问题
首先,科学上网一定能打开github的官网,但是idea中仍然无法push
此时查看你的代理服务器的端口,发现是7890

然后打开git bash,输入以下代码:
使用http代理
git config --global http.proxy http://127.0.0.1:7890 git config --global https.proxy https://127.0.0.1:7890
使用socks5代理
git config --global http.proxy socks5://127.0.0.1:7890 git config --global https.proxy socks5://127.0.0.1:7890
取消代理
git config --global --unset http.proxy git config --global --unset https.proxy
或者使用国产的gitee或者自己服务器上搭建gitea进行代码托管!!!
拉取代码与解决冲突
git pull
命令用于从远程仓库拉取(fetch)并合并(merge)最新的更改到本地仓库。它实际上执行了两个操作:
git fetch
: 这个操作会从远程仓库下载最新的更改到本地仓库,但不会自动合并到当前分支。它将远程仓库的更改存储在本地仓库中,使你能够查看它们,但不会更改你当前工作目录中的文件。git merge
: 这个操作将远程仓库的更改合并到当前分支。如果有冲突,你需要解决冲突后再次提交合并的结果
情况1:本地修改代码未提交,拉取代码的时候就会报错:
错误:您对下列文件的本地修改将被合并操作覆盖: docker-compose.yaml 请在合并前提交或贮藏您的修改。 正在终止
暂存未提交的更改(git stash)
如果还不想提交本地修改,可以将更改暂存起来:
git stash
git pull
git stash pop
git stash
会将当前工作区的改动保存到一个栈中,拉取完成后通过 git stash pop
恢复修改。如果恢复过程中出现冲突,同样需要手动解决。
舍弃本地修改
如果确定不需要这些修改,可以放弃它们:
git reset --hard
git pull
但是推荐先提交本地的代码!!!
git add .
git commit -m "描述本次修改的提交信息"
git pull
情况2:权限校验问题
一般可以保持git网页端账号的登录状态,再pull,会有弹窗出来输入git的用户名和密码,成功后即可拉取。
情况3 合并冲突,以pycharm为例
1.触发冲突解决界面
当你执行 git pull
后如果出现冲突,PyCharm 会在右下角或版本控制工具窗口中提醒有冲突文件。你可以点击提示信息或在版本控制面板中找到冲突文件。
2.启动合并工具 双击冲突文件后,PyCharm 会自动打开三方合并工具。界面通常分为三部分:
- 左侧:本地修改(当前分支的更改)
- 右侧:远程修改(要合并进来的更改)
- 中间:合并结果(你需要编辑的区域)
3.手动选择并合并代码 在合并工具中,你可以逐个查看冲突部分:
- 点击左侧或右侧的按钮来选择保留哪部分内容。
- 如果需要,你也可以手动编辑中间的合并结果区域,直接输入合适的代码。
- 合并工具通常会有跳转到下一个冲突的按钮,方便你逐个解决。
4.保存合并结果并标记解决 合并完成后,点击工具窗口上的“Apply”或“Accept Merge”按钮,保存你的修改。此时,冲突文件会标记为已解决。
5.提交合并后的更改 返回主界面后,你可以在版本控制面板中看到已解决的文件。检查确认无误后,通过 VCS 菜单或直接点击工具栏中的提交按钮,将合并结果提交到仓库。
其他Git相关
SSH公私钥
公私钥生成
在linux中,使用账号密码链接github报错如下:
remote: Support for password authentication was removed on August 13, 2021. remote: Please see https://docs.github.com/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication. 致命错误:'https://github.com/zhangww-web/reptile.git/' 鉴权失败
原因是linux不支持账号密码链接!!
配置ssh,可以在git push的时候直接推送,github会通过ssh来验证你的身份。
如何在linux中配置私钥?
生成 SSH 密钥:
-
如果你还没有 SSH 密钥,可以使用以下命令生成:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
-
按照提示保存密钥文件。
添加 SSH 密钥到 GitHub:
- 复制生成的公钥内容(通常在
~/.ssh/id_rsa.pub
文件中)。 - 登录到 GitHub。
- 进入 SSH and GPG keys 页面。
- 点击 "New SSH key" 按钮,粘贴公钥内容并保存。
使用 SSH URL 克隆仓库:
git clone git@github.com:zhangww-web/reptile.git
SSH 连接 GitHub 并触发身份验证,流程如下:
- GitHub 发送一个随机挑战(Challenge) GitHub 服务器会向你的 Linux 服务器发送一个随机字符串,并用 你的公钥 进行加密。
- 你的 Linux 服务器用私钥解密
你的 SSH 客户端(
ssh
命令或git
)会自动使用本地的 私钥(id_rsa) 进行解密。如果解密成功,证明你拥有匹配的私钥。 - 返回解密后的数据 你的客户端将解密后的数据返回给 GitHub。
- GitHub 验证解密结果 GitHub 服务器检查解密结果是否匹配它最初发送的随机挑战。如果匹配,则认证成功。
身份验证逻辑:GitHub 发送加密数据 → 你的私钥解密 → 返回结果 → GitHub 确认一致性 → 认证成功。
如果避免每次git pull都要验证身份?
git config --global credential.helper store //将凭据保存到磁盘上(明文存储):
.gitignore(忽略某些文件)
如果不小心commit了如何撤销?
例:如果在添加.gitignore
文件前不小心提交了.idea
文件夹,到项目根目录,git bash here
git rm -r --cached -f .idea
git commit -m "Remove .idea from tracking"
在.gitignore文件进行添加
为什么.gitignore
文件不放在.git
文件夹中?
- 用途不同:
.git
文件夹由Git自动创建,用于存储Git的内部数据,包括所有提交记录、配置和对象等。用户一般不需要手动修改这个文件夹里的内容。而.gitignore
文件是用户创建和维护的,用于定义哪些文件和目录应被Git忽略。 - 便于版本控制:
.gitignore
文件放在项目的根目录中,可以和项目代码一起被版本控制,这样其他协作开发者也能看到和使用相同的忽略规则。如果把.gitignore
放在.git
文件夹中,它就不会被版本控制系统追踪到。
撤销Git版本控制
直接把项目文件夹中的.git文件夹删除即可(开启查看隐藏文件夹可看到)
若idea/pycharm报错:
COVID-19-Detector is registered as a Git root, but no Git repositories were found there.
添加协作者
协作者权限
如果不使用组织的话,你也可以单独为每个仓库添加协作者。这样做的话,公钥仍然应该添加到你的个人设置中,但是你可以在每个仓库的设置中单独管理协作者访问权限。
设置步骤包括:
- 打开你想要添加协作者的仓库。
- 导航到仓库设置中的“Manage access”(管理访问)或“Collaborators”(协作者)部分。
- 添加协作者的GitHub用户名,并设置他们的访问级别。