1.使用“git”代码管理工具,导入项目
注:在本地已创建了一个新项目,三方管理工具已配置好信息,需要将本地项目工程传到三方管理工具上,使用"git"分布式来管理,传到分支上
- cd 工程文件项目
- git init
//创建本地仓库 这时出现 Initialized empty Git repository in ... 创建空的本地仓库
- touch README.md
//创建帮助文件
- git add README
//(添加readme文件到本地仓库)
- git add .
//将项目的所有文件添加到缓存中。git add . (注意,后面有个点)表示添加目录下所有文件到缓存库,如果只添加某个文件,只需把 . 换成你要添加的文件名即可;
- git commit -m "注释内容"
//将缓存中的文件Commit到git库
- git remote add origin "上面复制的路径"
//将本地的库连接到远程仓库中,输入:git remote add originHTTPS链接
//(你的远程仓库地址,即是码云的项目地址)//和远程仓库进行关联
- git pull origin master
//先执行从远程库拉取项目
- git push -u origin master. //git push origin master
//上传本地项目到了三方代码管理库
以下是另外一种上传方式
- git push origin master 或 git push -u origin master//上传仓库到码云
(如果你是在分支操作,就将这个master变为你的分支名称)
注:若push失败,则需先从码云上将你建的空项目拉取到本地,先执行git pull origin master,再执行git push -u origin master 若任然push失败,则使用此命令 git push --force origin master
一些其他命令
git clone url(项目仓库地址) //克隆一个远程仓库,就是在本地建立一个新的项目。
git pull origin master //如果已经有一个项目,通过这条指令可以直接更新该项目
git status
//查看当前状态git add -A
//将所有代码添加到缓存中git commit -a -m "填写修改的内容"
//commit 到仓库中git push -u origin master
//提交到远程仓库中
分支管理
- git branch newbranch
//新建分支
- git branch -a
//查看远程分支
输出
* master
remotes/origin/HEAD -> origin/master
remotes/origin/dadiaoge
remotes/origin/master
*代表当前所在的分支
- git branch
//查看本地分支
输出
* master
newbranch
- git checkout new branch
//切换分支
输出
Switched to branch 'newbranch'
切换后可用git branch -a查看是否切换到当前分支
输出
master
* newbranch
- git add .
git commit -a
//提交改动到当前分支
可使用git status查看提交状态
接着切回主分支
- git checkout master
输出
Switched to branch 'master'
将新分支提交的改动合并到主分支上
- git merge newbranch
如果合并后产生冲突,可输入以下指令查看冲突:
- git diff
修改之后,再次提交即可;
接下来,就可以push代码了:
- git push -u origin master
这时可能需要你输入你的github用户名和密码,按照提示输入即可;
删除分支
- git branch -D newbranch
输出
Deleted branch newbranch (was 93a1347).
回退版本
回退版本分为两种情况,一种是已提交到服务端,一种是未提交到服务端。下面是针对不同场景下的使用说明:
| 特性 / 命令 | git reset |
git revert |
|---|---|---|
| 核心作用 | 移动分支指针,丢弃(或保留)提交 | 创建一个新的提交,来抵消指定提交的更改 |
| 是否修改历史 | 是,会重写提交历史 | 否,在历史中新增一个反向提交,原历史保留 |
| 主要风险 | 若推送到公共分支,会导致他人历史记录混乱 | 几乎无风险,是最安全的回滚方式 |
| 适用场景 | 回滚尚未推送到远程的本地提交 | 回滚已经推送到远程的公共分支上的提交 |
查看历史版本
git log
-
未上传到服务端
- 硬回滚(hard reset)。回退到之前版本,并且代码也回滚到之前的代码。并删除所有修改的代码,回到指定提交之前的状态。
git reset --hard commit_id
这个commit_id就是通过 git log 查看到的commit_id
- 软回滚(soft reset)。回退到之前的commit缓存区,代码不会变化,只会撤销最新的提交,回到指定提交之前,并保留修改的代码。
git reset --soft commit_id
-
已上传到服务端
git revert的核心设计哲学是 “非破坏性操作” 。它不会从项目历史中抹去任何提交,而是通过创建一个新的提交,来精确地抵消(反转)一个或多个现有提交所带来的更改。
标准操作流程
1. 确定目标提交
首先,使用 git log --oneline 查看提交历史,找到你想要撤销的提交的哈希值(如 a1b2c3d)。你也可以使用相对引用,如HEAD(当前提交)、HEAD~1(前一个提交)等。
# 查看简洁历史
$ git log --oneline
b5f6g7h (HEAD -> main) 修复了登录验证的边界条件
a1b2c3d 引入了新的用户统计模块 # <-- 我们想撤销这个提交
c8d9e0f 更新了首页样式
...
2. 执行 git revert 命令
基本命令格式为:git revert [选项] <commit-hash>
- 撤销单个普通提交:
git revert a1b2c3d
执行后,Git会尝试自动创建一个反向更改的提交。它会打开默认的文本编辑器(如Vim、VSCode),让你编辑这个新提交的默认信息(通常格式为 Revert “原提交信息”)。你可以直接保存退出,或修改后保存。
- 撤销多个连续提交:
使用..符号指定一个左开右闭的区间,撤销从<commit1>之后到<commit2>为止的所有提交。注意:提交顺序必须从旧到新。
# 撤销从 commitA(不包括)之后,到 commitD(包括)之间的所有提交
git revert commitA..commitD
这会为区间内的每一个提交(顺序从新到旧)依次创建一个 revert 提交。
- 撤销多个非连续提交:
一次性列出多个提交哈希,用空格隔开。
git revert abc123 def456
同样会为每个提交创建一个 revert 提交。
- 常用选项:
-n或--no-commit:执行反向更改,但不自动创建提交。更改会存放在工作区和暂存区。这允许你手动整理多个revert的更改,然后一次性提交。
-m <parent-number>:用于撤销一个合并提交(Merge Commit)。因为合并提交有两个父提交(来自被合并的两个分支),你需要通过-m 1或-m 2来指定要保留哪个分支的主线。这需要额外小心,后文会详述。
合并其他分支的一个commit至本地分支
- 先找到要合并分支的commit的commit_ID,可以使用
git log查看,可以通过xcode或者sourcetree都可以查看 - 关键命令
git cherry-pick - 具体步骤
1. cd 你的项目
2. git cherry-pick commit_ID
这里需要将commit_ID替换成你想合并的commit
- 示例
git cherry-pick 0209edac
替换项目的远程仓库地址
方法一:使用命令直接设置(推荐)
这是最快捷的方法,一步到位。
打开终端,进入你的iOS工程根目录。
执行设置命令:
git remote set-url origin <你的新仓库地址>
注意:如果远程仓库名称不是默认的 origin,请将其替换为你实际的远程仓库名称
方法二:先删除旧地址,再添加新地址
- 删除当前项目的远程仓库连接
git remote rm origin
2.重新添加一个新的远程仓库连接
git remote add origin 远程仓库地址
查看mac电脑的隐藏文件
当我们使用git开发过程中,有天突然创建了一个新的pods工程,但是这个新的工程并不会和我们的远程仓库关联上,这个时候就需要改改
- 打开或者关闭文件的隐藏东西。快捷键
⌘ ⇧ .
command + shift + .
- 删除
.git和.gitignore
ssh 克隆 代码
ssh克隆代码比http克隆代码强一万倍,fuck,能用ssh,就不用http,会出现一万种问题,最常见的就是缓冲区不够,说的开辟更大的,先讲下http克隆代码
- 使用命令
git config --global http.postBuffer 524288000 和 git config --global https.postBuffer 524288000,这个是500M。由于我们公司仓库很大,1.6个G,于是我开辟了2个G的空间,发现还是不行,后面不管我开启多大的,都不行。 - 第二种方案,只克隆最近一次提交的,就是克隆下来的只有最近的一次commit,使用命令
git clone --depth=1 https:xxx.git,https:xxx.git 就是你的仓库地址,结果发现的确克隆下来了,但是克隆下来的只有master,没有其他分支,也是个坑。 - 接着第二种方案,如果说只要一个分支,还是可以将就使用,还需要使用一个命令,将其他commit 和 tag 再拉下来,使用命令
git fetch --unshallow,最后再使用命令git pull --all
接下来还是讲ssh。首先创建ssh文件,一般系统默认的都不行,必须重新创建
首先,你需要在本地电脑上生成一对 SSH 密钥(一个公钥,一个私钥)。
打开终端:在你的电脑上打开终端(Terminal)应用。
生成密钥:输入以下命令,将 your_email@example.com 替换为你 Git 服务商(如 GitHub、GitLab 等)注册的邮箱:
ssh-keygen -t rsa -C "your_email@example.com"
指定保存路径:执行命令后,系统会提示你"Enter a file in which to save the key"。建议使用默认路径(直接按回车键),通常在用户主目录下的 .ssh 文件夹中,例如 ~/.ssh/id_rsa。如果你需要为多个 Git 账户生成不同的密钥,这里可以输入一个不同的名字,例如 ~/.ssh/id_rsa_work。
设置密码(可选):之后会提示你"Enter passphrase",可以为密钥设置一个密码以提高安全性。如果不想设置,直接按两次回车键即可。
完成后,你会在 .ssh 目录下得到两个文件:私钥(如 id_rsa)和公钥(如 id_rsa.pub)。切记保护好私钥,不要泄露给他人。
添加公钥到 Git 服务商
- 复制公钥内容:在终端中,使用以下命令打印并复制公钥文件的内容(注意替换为你实际的文件名):
cat ~/.ssh/id_rsa.pub
复制输出的全部内容,它通常以 ssh-rsa 开头,后面跟着一串长长的字符,并以你的邮箱结尾。
保存即可。
-
从头到尾都复制,放到key中
ssh.png
- 添加到 Git 服务商:
登录你的 GitHub 或 GitLab 等账户。
进入 "Settings" (设置) -> "SSH and GPG keys" (SSH和GPG密钥) 或类似选项。
点击 "New SSH key" (新建SSH密钥) 按钮。
将刚才复制的公钥内容粘贴到 "Key" (密钥) 字段中,并为这个密钥起一个容易识别的标题(例如"My MacBook")。
配置本地SSH
当我们使用sourcetree的时候,需要将ssh配置上去,
- 使用命令
ssh-add ~/.ssh/id_rsa,添加到sourcetree里面 - 执行ssh-add -K ~/.ssh/id_rsa将sshkey添加到钥匙串
- cd 到 .ssh目录下, 用touch config命令创建config文件
- 执行open config, 打开config文件,输入以下内容并保存
Host *
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/id_rsa
这个时候,你使用sourcetree,才能够克隆ssh方法的代码
公司网络访问github受限制
- 编辑hosts,文件路径 /etc/hosts
- 添加ip地址
# GitHub520 Host Start
140.82.112.25 alive.github.com
140.82.112.5 api.github.com
185.199.110.153 assets-cdn.github.com
185.199.111.133 avatars.githubusercontent.com
185.199.111.133 avatars0.githubusercontent.com
185.199.111.133 avatars1.githubusercontent.com
185.199.111.133 avatars2.githubusercontent.com
185.199.111.133 avatars3.githubusercontent.com
185.199.111.133 avatars4.githubusercontent.com
185.199.111.133 avatars5.githubusercontent.com
185.199.111.133 camo.githubusercontent.com
140.82.114.22 central.github.com
185.199.111.133 cloud.githubusercontent.com
140.82.112.10 codeload.github.com
140.82.112.22 collector.github.com
185.199.111.133 desktop.githubusercontent.com
185.199.111.133 favicons.githubusercontent.com
140.82.112.4 gist.github.com
52.217.34.20 github-cloud.s3.amazonaws.com
52.217.81.156 github-com.s3.amazonaws.com
52.216.132.195 github-production-release-asset-2e65be.s3.amazonaws.com
52.217.41.76 github-production-repository-file-5c1aeb.s3.amazonaws.com
16.182.97.81 github-production-user-asset-6210df.s3.amazonaws.com
192.0.66.2 github.blog
140.82.112.3 github.com
140.82.113.17 github.community
185.199.110.154 github.githubassets.com
151.101.193.194 github.global.ssl.fastly.net
185.199.110.153 github.io
185.199.111.133 github.map.fastly.net
185.199.110.153 githubstatus.com
140.82.112.25 live.github.com
185.199.111.133 media.githubusercontent.com
185.199.111.133 objects.githubusercontent.com
13.107.42.16 pipelines.actions.githubusercontent.com
185.199.111.133 raw.githubusercontent.com
185.199.111.133 user-images.githubusercontent.com
13.107.213.40 vscode.dev
140.82.113.22 education.github.com
# Update time: 2024-01-17T07:52:51+08:00
# Update url: https://raw.hellogithub.com/hosts
# Star me: https://github.com/521xueweihan/GitHub520
# GitHub520 Host End
