iOS git的使用,開發(fā)過程中問題記錄

1.使用“git”代碼管理工具,導(dǎo)入項(xiàng)目

注:在本地已創(chuàng)建了一個(gè)新項(xiàng)目,三方管理工具已配置好信息,需要將本地項(xiàng)目工程傳到三方管理工具上,使用"git"分布式來管理,傳到分支上

  • cd 工程文件項(xiàng)目
  • git init
    //創(chuàng)建本地倉庫 這時(shí)出現(xiàn) Initialized empty Git repository in ... 創(chuàng)建空的本地倉庫
  • touch README.md
    //創(chuàng)建幫助文件
  • git add README
    //(添加readme文件到本地倉庫)
  • git add .
    //將項(xiàng)目的所有文件添加到緩存中。git add . (注意,后面有個(gè)點(diǎn))表示添加目錄下所有文件到緩存庫,如果只添加某個(gè)文件,只需把 . 換成你要添加的文件名即可;
  • git commit -m "注釋內(nèi)容"
    //將緩存中的文件Commit到git庫
  • git remote add origin "上面復(fù)制的路徑"
    //將本地的庫連接到遠(yuǎn)程倉庫中,輸入: git remote add origin HTTPS鏈接
    //(你的遠(yuǎn)程倉庫地址,即是碼云的項(xiàng)目地址)//和遠(yuǎn)程倉庫進(jìn)行關(guān)聯(lián)
  • git pull origin master
    //先執(zhí)行從遠(yuǎn)程庫拉取項(xiàng)目
  • git push -u origin master. //git push origin master

//上傳本地項(xiàng)目到了三方代碼管理庫


以下是另外一種上傳方式

  • git push origin master 或 git push -u origin master//上傳倉庫到碼云
    (如果你是在分支操作,就將這個(gè)master變?yōu)槟愕姆种Q)

注:若push失敗,則需先從碼云上將你建的空項(xiàng)目拉取到本地,先執(zhí)行g(shù)it pull origin master,再執(zhí)行g(shù)it push -u origin master 若任然push失敗,則使用此命令 git push --force origin master


一些其他命令

  • git clone url(項(xiàng)目倉庫地址) //克隆一個(gè)遠(yuǎn)程倉庫,就是在本地建立一個(gè)新的項(xiàng)目。

  • git pull origin master //如果已經(jīng)有一個(gè)項(xiàng)目,通過這條指令可以直接更新該項(xiàng)目

  • git status
    //查看當(dāng)前狀態(tài)

  • git add -A
    //將所有代碼添加到緩存中

  • git commit -a -m "填寫修改的內(nèi)容"
    //commit 到倉庫中

  • git push -u origin master
    //提交到遠(yuǎn)程倉庫中


分支管理

  • git branch newbranch
    //新建分支
  • git branch -a
    //查看遠(yuǎn)程分支

輸出

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dadiaoge
  remotes/origin/master
*代表當(dāng)前所在的分支
  • git branch
    //查看本地分支

輸出

* master
  newbranch
  • git checkout new branch
    //切換分支

輸出

Switched to branch 'newbranch'

切換后可用git branch -a查看是否切換到當(dāng)前分支

輸出

master
* newbranch
  • git add .
    git commit -a
    //提交改動(dòng)到當(dāng)前分支

可使用git status查看提交狀態(tài)
接著切回主分支

  • git checkout master

輸出

Switched to branch 'master'

將新分支提交的改動(dòng)合并到主分支上

  • git merge newbranch

如果合并后產(chǎn)生沖突,可輸入以下指令查看沖突:

  • git diff

修改之后,再次提交即可;
接下來,就可以push代碼了:

  • git push -u origin master

這時(shí)可能需要你輸入你的github用戶名和密碼,按照提示輸入即可;

刪除分支
  • git branch -D newbranch

輸出

Deleted branch newbranch (was 93a1347).

回退版本

回退版本分為兩種情況,一種是已提交到服務(wù)端,一種是未提交到服務(wù)端。下面是針對(duì)不同場(chǎng)景下的使用說明:

特性 / 命令 git reset git revert
核心作用 移動(dòng)分支指針,丟棄(或保留)提交 創(chuàng)建一個(gè)新的提交,來抵消指定提交的更改
是否修改歷史 ,會(huì)重寫提交歷史 ,在歷史中新增一個(gè)反向提交,原歷史保留
主要風(fēng)險(xiǎn) 若推送到公共分支,會(huì)導(dǎo)致他人歷史記錄混亂 幾乎無風(fēng)險(xiǎn),是最安全的回滾方式
適用場(chǎng)景 回滾尚未推送到遠(yuǎn)程的本地提交 回滾已經(jīng)推送到遠(yuǎn)程的公共分支上的提交

查看歷史版本

git log

  • 未上傳到服務(wù)端

  1. 硬回滾(hard reset)。回退到之前版本,并且代碼也回滾到之前的代碼。并刪除所有修改的代碼,回到指定提交之前的狀態(tài)。
git reset --hard commit_id

這個(gè)commit_id就是通過 git log 查看到的commit_id

  1. 軟回滾(soft reset)。回退到之前的commit緩存區(qū),代碼不會(huì)變化,只會(huì)撤銷最新的提交,回到指定提交之前,并保留修改的代碼。
git reset --soft commit_id
  • 已上傳到服務(wù)端

git revert的核心設(shè)計(jì)哲學(xué)是 “非破壞性操作” 。它不會(huì)從項(xiàng)目歷史中抹去任何提交,而是通過創(chuàng)建一個(gè)新的提交,來精確地抵消(反轉(zhuǎn))一個(gè)或多個(gè)現(xiàn)有提交所帶來的更改。

標(biāo)準(zhǔn)操作流程

1. 確定目標(biāo)提交

首先,使用 git log --oneline 查看提交歷史,找到你想要撤銷的提交的哈希值(如 a1b2c3d)。你也可以使用相對(duì)引用,如HEAD(當(dāng)前提交)、HEAD~1(前一個(gè)提交)等。

# 查看簡潔歷史
$ git log --oneline
b5f6g7h (HEAD -> main) 修復(fù)了登錄驗(yàn)證的邊界條件
a1b2c3d 引入了新的用戶統(tǒng)計(jì)模塊  # <-- 我們想撤銷這個(gè)提交
c8d9e0f 更新了首頁樣式
...
2. 執(zhí)行 git revert 命令

基本命令格式為:git revert [選項(xiàng)] <commit-hash>

  • 撤銷單個(gè)普通提交:
git revert a1b2c3d

執(zhí)行后,Git會(huì)嘗試自動(dòng)創(chuàng)建一個(gè)反向更改的提交。它會(huì)打開默認(rèn)的文本編輯器(如Vim、VSCode),讓你編輯這個(gè)新提交的默認(rèn)信息(通常格式為 Revert “原提交信息”)。你可以直接保存退出,或修改后保存。

  • 撤銷多個(gè)連續(xù)提交:
    使用..符號(hào)指定一個(gè)左開右閉的區(qū)間,撤銷從 <commit1> 之后到 <commit2>為止的所有提交。注意:提交順序必須從舊到新。
# 撤銷從 commitA(不包括)之后,到 commitD(包括)之間的所有提交
git revert commitA..commitD

這會(huì)為區(qū)間內(nèi)的每一個(gè)提交(順序從新到舊)依次創(chuàng)建一個(gè) revert 提交。

  • 撤銷多個(gè)非連續(xù)提交:
    一次性列出多個(gè)提交哈希,用空格隔開。
 git revert abc123 def456

同樣會(huì)為每個(gè)提交創(chuàng)建一個(gè) revert 提交。

  • 常用選項(xiàng):
    -n--no-commit:執(zhí)行反向更改,但不自動(dòng)創(chuàng)建提交。更改會(huì)存放在工作區(qū)和暫存區(qū)。這允許你手動(dòng)整理多個(gè)revert的更改,然后一次性提交。
    -m <parent-number>:用于撤銷一個(gè)合并提交(Merge Commit)。因?yàn)楹喜⑻峤挥袃蓚€(gè)父提交(來自被合并的兩個(gè)分支),你需要通過 -m 1-m 2 來指定要保留哪個(gè)分支的主線。這需要額外小心,后文會(huì)詳述。

合并其他分支的一個(gè)commit至本地分支

  1. 先找到要合并分支的commit的commit_ID,可以使用git log查看,可以通過xcode或者sourcetree都可以查看
  2. 關(guān)鍵命令git cherry-pick
  3. 具體步驟
1. cd 你的項(xiàng)目
2. git cherry-pick commit_ID
這里需要將commit_ID替換成你想合并的commit
  1. 示例
git cherry-pick 0209edac

替換項(xiàng)目的遠(yuǎn)程倉庫地址

方法一:使用命令直接設(shè)置(推薦)

這是最快捷的方法,一步到位。

  1. 打開終端,進(jìn)入你的iOS工程根目錄。

  2. 執(zhí)行設(shè)置命令:

git remote set-url origin <你的新倉庫地址>

注意:如果遠(yuǎn)程倉庫名稱不是默認(rèn)的 origin,請(qǐng)將其替換為你實(shí)際的遠(yuǎn)程倉庫名稱

方法二:先刪除舊地址,再添加新地址

  1. 刪除當(dāng)前項(xiàng)目的遠(yuǎn)程倉庫連接

git remote rm origin

2.重新添加一個(gè)新的遠(yuǎn)程倉庫連接

git remote add origin 遠(yuǎn)程倉庫地址

查看mac電腦的隱藏文件

當(dāng)我們使用git開發(fā)過程中,有天突然創(chuàng)建了一個(gè)新的pods工程,但是這個(gè)新的工程并不會(huì)和我們的遠(yuǎn)程倉庫關(guān)聯(lián)上,這個(gè)時(shí)候就需要改改

  1. 打開或者關(guān)閉文件的隱藏東西??旖萱I

? ? .

command + shift +  . 
  1. 刪除.git.gitignore

ssh 克隆 代碼

ssh克隆代碼比http克隆代碼強(qiáng)一萬倍,fuck,能用ssh,就不用http,會(huì)出現(xiàn)一萬種問題,最常見的就是緩沖區(qū)不夠,說的開辟更大的,先講下http克隆代碼

  1. 使用命令git config --global http.postBuffer 524288000 和 git config --global https.postBuffer 524288000,這個(gè)是500M。由于我們公司倉庫很大,1.6個(gè)G,于是我開辟了2個(gè)G的空間,發(fā)現(xiàn)還是不行,后面不管我開啟多大的,都不行。
  2. 第二種方案,只克隆最近一次提交的,就是克隆下來的只有最近的一次commit,使用命令
    git clone --depth=1 https:xxx.git,https:xxx.git 就是你的倉庫地址,結(jié)果發(fā)現(xiàn)的確克隆下來了,但是克隆下來的只有master,沒有其他分支,也是個(gè)坑。
  3. 接著第二種方案,如果說只要一個(gè)分支,還是可以將就使用,還需要使用一個(gè)命令,將其他commit 和 tag 再拉下來,使用命令
    git fetch --unshallow,最后再使用命令git pull --all
接下來還是講ssh。首先創(chuàng)建ssh文件,一般系統(tǒng)默認(rèn)的都不行,必須重新創(chuàng)建
  1. 首先,你需要在本地電腦上生成一對(duì) SSH 密鑰(一個(gè)公鑰,一個(gè)私鑰)。

  2. 打開終端:在你的電腦上打開終端(Terminal)應(yīng)用。

  3. 生成密鑰:輸入以下命令,將 your_email@example.com 替換為你 Git 服務(wù)商(如 GitHub、GitLab 等)注冊(cè)的郵箱:

ssh-keygen -t rsa -C  "your_email@example.com"
  1. 指定保存路徑:執(zhí)行命令后,系統(tǒng)會(huì)提示你"Enter a file in which to save the key"。建議使用默認(rèn)路徑(直接按回車鍵),通常在用戶主目錄下的 .ssh 文件夾中,例如 ~/.ssh/id_rsa。如果你需要為多個(gè) Git 賬戶生成不同的密鑰,這里可以輸入一個(gè)不同的名字,例如 ~/.ssh/id_rsa_work。

  2. 設(shè)置密碼(可選):之后會(huì)提示你"Enter passphrase",可以為密鑰設(shè)置一個(gè)密碼以提高安全性。如果不想設(shè)置,直接按兩次回車鍵即可。

  3. 完成后,你會(huì)在 .ssh 目錄下得到兩個(gè)文件:私鑰(如 id_rsa)和公鑰(如 id_rsa.pub)。切記保護(hù)好私鑰,不要泄露給他人。

添加公鑰到 Git 服務(wù)商
  1. 復(fù)制公鑰內(nèi)容:在終端中,使用以下命令打印并復(fù)制公鑰文件的內(nèi)容(注意替換為你實(shí)際的文件名):
cat ~/.ssh/id_rsa.pub

復(fù)制輸出的全部內(nèi)容,它通常以 ssh-rsa 開頭,后面跟著一串長長的字符,并以你的郵箱結(jié)尾。

  • 保存即可。

  • 從頭到尾都復(fù)制,放到key中


    ssh.png
  1. 添加到 Git 服務(wù)商:
    登錄你的 GitHub 或 GitLab 等賬戶。
  • 進(jìn)入 "Settings" (設(shè)置) -> "SSH and GPG keys" (SSH和GPG密鑰) 或類似選項(xiàng)。

  • 點(diǎn)擊 "New SSH key" (新建SSH密鑰) 按鈕。

  • 將剛才復(fù)制的公鑰內(nèi)容粘貼到 "Key" (密鑰) 字段中,并為這個(gè)密鑰起一個(gè)容易識(shí)別的標(biāo)題(例如"My MacBook")。

配置本地SSH

當(dāng)我們使用sourcetree的時(shí)候,需要將ssh配置上去,

  1. 使用命令ssh-add ~/.ssh/id_rsa,添加到sourcetree里面
  2. 執(zhí)行ssh-add -K ~/.ssh/id_rsa將sshkey添加到鑰匙串
  3. cd 到 .ssh目錄下, 用touch config命令創(chuàng)建config文件
  4. 執(zhí)行open config, 打開config文件,輸入以下內(nèi)容并保存
Host *
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/id_rsa

這個(gè)時(shí)候,你使用sourcetree,才能夠克隆ssh方法的代碼

公司網(wǎng)絡(luò)訪問github受限制

  1. 編輯hosts,文件路徑 /etc/hosts
  2. 添加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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容