日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Mac~git学习和应用需要注意的几个点

發(fā)布時間:2025/4/5 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mac~git学习和应用需要注意的几个点 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Git學(xué)習(xí)推薦網(wǎng)站:廖雪峰-Git教程 - 廖雪峰的官方網(wǎng)站,通俗易懂,簡單粗暴,就是平俗的語言,好懂、粗暴的那種

git學(xué)習(xí)進(jìn)階~國外經(jīng)典git學(xué)習(xí)網(wǎng)站:Git - Book

目錄

1. 全局配置和單個項目倉庫的用戶名郵箱配置

2. git diff命令

3. git add 和 git commit命令

4. 版本回退命令

5. 文件刪除rm

6.?添加遠(yuǎn)程庫

7.?刪除遠(yuǎn)程庫

8. 兩種創(chuàng)建版本庫方式

9. 更新本地版本庫

10. git忽略文件

11. 修改和合并多條commit信息

12. 分支管理


1. 全局配置和單個項目倉庫的用戶名郵箱配置

如果你配置的全局的用戶名和郵箱是公司的,而自己也有私人用戶名和郵箱來開發(fā)自己項目,這樣可能一臺電腦需要設(shè)置多個git用戶名配置的項目。如果你不進(jìn)行配置用戶名和郵箱的話, 則會使用全局的, 這個時候是錯誤的, 正確的做法是針對個人的項目, 在自己的項目根目錄下進(jìn)行單獨配置

  • 全局配置

  • 目前大部分公司都已經(jīng)使用gitlab或github管理項目代碼, 在使用git時相信大家都配置了一個全局的用戶名和郵箱

$ git config --global user.name "gitlab Name"$ git config --global user.email "gitlab@xx.com"$ git config --list
  • 非公司或非個人的單個項目?

如果你配置的全局的用戶名和郵箱是公司的,而自己也有私人用戶名和郵箱來開發(fā)自己項目,這樣可能一臺電腦需要設(shè)置多個git用戶名配置的項目。如果你不進(jìn)行配置用戶名和郵箱的話, 則會使用全局的, 這個時候是錯誤的, 正確的做法是針對個人的項目, 在自己的項目根目錄下進(jìn)行單獨配置

$ git config user.name "mygitlab Name"$ git config user.email "mygitlab@xx.com"$ git config --list

git config --list查看當(dāng)前配置, 在當(dāng)前項目下面查看的配置是全局配置+當(dāng)前項目的配置, 使用的時候會優(yōu)先使用當(dāng)前項目的配置
參考原文:https://blog.csdn.net/hyupeng1006/article/details/116154080

  • 刪除單個項目的用戶郵箱參數(shù),恢復(fù)使用全局配置

由于每個git項目下都會有一個隱藏的.git文件夾 ,將終端的工作目錄設(shè)置到,相應(yīng)的項目根目錄下,執(zhí)行l(wèi)s -all命令,顯示所有文件,即可看到.git的隱藏文件夾。通過cd .git 進(jìn)入該目錄,發(fā)現(xiàn)該目錄下有個config文件,采用open config 命令打開,刪除個人參數(shù)即可:

[user]name = XXX(自己的名稱英文)email = XXXX(郵箱)

保存,command+s 即可。

2. git diff命令

git diff顧名思義就是查看difference,知道了對readme.txt作了什么,這一步查看是在git add xx.file之前,再把它提交到倉庫就放心多了

3. git add 和 git commit命令

commit而不是add在git中類似于保存,版本回退就是基于commit保存機制進(jìn)行的,比如:git reset --hard HEAD(表示當(dāng)前版本)/HEAD^(表示上一個版本)、--hard commit_id。

git add 文件夾???~git添加整個文件夾及內(nèi)容
git add -A?提交所有變化
git add -u 提交被修改(modified)和被刪除(deleted)文件,不包括新文件(new)
git add . 提交新文件(new)和被修改(modified)文件,不包括被刪除(deleted)文件

git add . 會把本地所有untrack的文件都加入暫存區(qū),并且會根據(jù).gitignore做過濾,但是git add * 會忽略.gitignore把任何文件都加入

4. 版本回退命令

  • 場景1:當(dāng)你改亂了工作區(qū)某個文件的內(nèi)容,想直接丟棄工作區(qū)的修改時,用命令git checkout -- file。在git add file之前
  • 場景2:當(dāng)你不但改亂了工作區(qū)某個文件的內(nèi)容,還添加到了暫存區(qū)時,想丟棄修改,分兩步,第一步用命令git reset HEAD <file>,就回到了場景1,第二步按場景1操作。在git add之后,在git commit之前
  • 場景3:已經(jīng)提交了不合適的修改到版本庫時,想要撤銷本次提交,git reset --hard HEAD^,不過前提是沒有推送到遠(yuǎn)程庫。在git commit之后,在git push之前
  • git reflog記錄你的git命令,用來尋找回退以前的版本

-->從暫存區(qū)恢復(fù)工作區(qū),git resotre --worktree readme.txt

-->從master恢復(fù)暫存區(qū),git restore --staged readme.txt

-->從master同時恢復(fù)工作區(qū)和暫存區(qū),git restore --source=HEAD --staged --worktree readme.txt

5. 文件刪除rm

$ rm test.txt rm也算一種修改,提交使用git rm而不是git add $ git rm test.txt $ git commit -m "remove test.txt" git checkout -- test.txt git checkout其實是用版本庫里的版本替換工作區(qū)的版本,無論工作區(qū)是修改還是刪除,都可以“一鍵還原”。

?注意:從來沒有被添加到版本庫就被刪除的文件,是無法恢復(fù)的!

6.?添加遠(yuǎn)程庫

  • 首先,登陸GitHub,然后,在右上角找到“Create a new repo”按鈕,創(chuàng)建一個新的倉庫:

  • 關(guān)聯(lián)本地版本庫與遠(yuǎn)程版本庫。
git remote add origin git@github.com:xxx/xxx.git
  • 推送上去。把本地庫的內(nèi)容推送到遠(yuǎn)程
git push -u origin master

-->我們第一次推送master分支時,加上了-u參數(shù),Git不但會把本地的master分支內(nèi)容推送的遠(yuǎn)程新的master分支,還會把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來,在以后的推送或者拉取時就可以簡化命令。

--> 強制推送:git push --force 或 git push -f origin master

7.?刪除遠(yuǎn)程庫

此處的“刪除”其實是解除了本地和遠(yuǎn)程的綁定關(guān)系,并不是物理上刪除了遠(yuǎn)程庫。遠(yuǎn)程庫本身并沒有任何改動。要真正刪除遠(yuǎn)程庫,需要登錄到GitHub,在后臺頁面找到刪除按鈕再刪除

如果添加的時候地址寫錯了,或者就是想刪除遠(yuǎn)程庫,可以用git remote rm <name>命令。使用前,建議先用git remote -v查看遠(yuǎn)程庫信息:

$ git remote -v origin git@github.com:michaelliao/learn-git.git (fetch) origin git@github.com:michaelliao/learn-git.git (push)

然后,根據(jù)名字刪除,比如刪除origin:

$ git remote rm origin

8. 兩種創(chuàng)建版本庫方式

  • 先創(chuàng)建本地版本庫再推送遠(yuǎn)程版本庫,git init --> git push
  • 先創(chuàng)建遠(yuǎn)程版本庫再克隆到本地文件夾,git clone

9. 更新本地版本庫

git分布式系統(tǒng)的目的就是合作,如果其他人的進(jìn)度比你快,并且提交了好幾次commit to remote repository,現(xiàn)在remote repository的版本領(lǐng)先你本地的版本庫了,腫么辦?-->更新本地庫

  • 先用git fetch到remote repository中獲取遠(yuǎn)程倉庫狀態(tài)和數(shù)據(jù)更新,獲取你本地倉庫還沒有的數(shù)據(jù)
  • 然后git merge與本地倉庫合并。雖然一般都是合并master,但也可以指定合并分支 <遠(yuǎn)程repo> <本地repo>:<本地分支>

另一種方法是git pull=git fetch + git merge,它比較簡單粗暴,直接硬合并,你無法看到通過git fetch得到的狀態(tài)更新數(shù)據(jù)。

--> 怎么git push origin master不好使,git push才行? --未解答

-->git fetch和git pull區(qū)別:

Git fetch和git pull區(qū)別為:遠(yuǎn)端跟蹤分支不同、拉取不同、commitID不同。

一、遠(yuǎn)端跟蹤分支不同

1、Git fetch:Git fetch能夠直接更改遠(yuǎn)端跟蹤分支。

2、git pull:git pull無法直接對遠(yuǎn)程跟蹤分支操作,我們必須先切回本地分支然后創(chuàng)建一個新的commit提交。

二、拉取不同

1、Git fetch:Git fetch會將數(shù)據(jù)拉取到本地倉庫 - 它并不會自動合并或修改當(dāng)前的工作。

2、git pull:git pull是從遠(yuǎn)程獲取最新版本并merge到本地,會自動合并或修改當(dāng)前的工作。

三、commitID不同

1、Git fetch:使用Git?fetch更新代碼,本地的庫中master的commitID不變,還是等于1。

2、git pull:使用git pull更新代碼,本地的庫中master的commitID發(fā)生改變,變成了2。

--> 最麻煩的問題:你本地執(zhí)行了修改操作并commit,遠(yuǎn)程倉庫也被其他人執(zhí)行了好幾次commit操作,造成無法合并的路徑、版本沖突了,即both modified same-file,你不能git push、pull或者git merge最新的遠(yuǎn)程版本庫

Your branch and 'origin/main' have diverged, and have 1 and 2 different commits each, respectively.(use "git pull" to merge the remote branch into yours)You have unmerged paths.(fix conflicts and run "git commit")(use "git merge --abort" to abort the merge)Unmerged paths:(use "git add <file>..." to mark resolution)both modified: README.md

解決方法

  • 一種方法是手動修改Git合并失敗的文件為我們希望的內(nèi)容,再提交
  • 還有一種方法是拋棄本庫對沖突文件的修改,全部替換為remote repository文件的內(nèi)容。
git reset --hard FETCH_HEAD

10. git忽略文件

  • 全局范圍內(nèi)有效的忽略文件

就是"版本庫根目錄/.git/info/exclude",全局范圍內(nèi)的所有忽略規(guī)則都以行為單位寫在這個文件中;

  • 局部范圍內(nèi)有效的忽略文件

就是.gitignore,這個忽略文件只對某一級目錄下的文件的忽略有效;

如果某一個目錄下有需要被忽略的文件,那么就可以在該目錄下手工地創(chuàng)建忽略文件.gitignore,并在這個忽略文件中寫上忽略規(guī)則,以行為單位,一條規(guī)則占據(jù)一行;

忽略配置語法:

以斜杠“/”開頭表示目錄;

以星號“*”通配多個字符;

以問號“?”通配單個字符

以方括號“[]”包含單個字符的匹配列表;

以嘆號“!”表示不忽略(跟蹤)匹配到的文件或目錄;

忽略示例

(1)規(guī)則:fd1/*

說明:忽略目錄 fd1 下的全部內(nèi)容;注意,不管是根目錄下的 /fd1/ 目錄,還是某個子目錄 /child/fd1/ 目錄,都會被忽略;

(2)規(guī)則:/fd1/*

說明:忽略根目錄下的 /fd1/ 目錄的全部內(nèi)容;

(3)規(guī)則:

/*

!.gitignore

!/fw/bin/

!/fw/sf/

說明:忽略全部內(nèi)容,但是不忽略 .gitignore 文件、根目錄下的 /fw/bin/ 和 /fw/sf/ 目錄;

(4).idea //忽略.idea文件夾及文件夾下文件

  *.iml //忽略以.iml結(jié)尾的文件

參考:Baby小豬,https://www.jianshu.com/p/62a412b7a6e8;git設(shè)置忽略文件和目錄 - wangmo - 博客園

11. 修改和合并多條commit信息

背景:Git項目,對同一個功能不斷改進(jìn)、多次遠(yuǎn)程提交生成commit記錄的情況,不利于觀看。

目的:為了保證一個功能點只有一條提交記錄利于后續(xù)維護(hù),需要利用git rebase命令對屬于同一功能點的多條commit記錄進(jìn)行合并。

rebase需要準(zhǔn)備理解rebase的含義!!rebase的含義其實包括選基(rebase commit_id)合并(pick,squash,fixup commit)兩步,雖然選基和合并都遵循“前一步原則”,但rebase的commit_id和pick的commit_id絕對不一樣!!

rebase的commit_id是要選擇幾個commits并入的那個commit_id的前一個commit_id;而幾條commit_id要并入的那個commit_id是在vim里面的前一條id,用pick標(biāo)記。即rebase選擇的commit_id是所有操作commit_id的基,并不參與任何操作或者并入,比如說commit1、2、3、4,我打算將commit1、2并入commit3,那rebase選擇的commit_id是4,commit1、2、3都在vim里面操作!

?具體案例步驟參考:
————————————————
版權(quán)聲明:本文為CSDN博主「書憶江南」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_33588730/article/details/110230039

(1)?確定此次合并基于的base記錄

既然要合并“Support”那一條與它上面三條的總共四次commit記錄,就要以“Support”那條第一次提交記錄的再下面那條“Merge branch”記錄,作為本次合并的base記錄。這點容易理解,就像造房子需要在地基之上建,第一次提交記錄的再之前一次記錄就是本次“地基”。因此輸入以下命令開始此次記錄合并,commit id就是選取的base記錄的id:

git rebase -i 4560d5dd728c627291201eb8c04041628de7d5e4

(2)?合并多個commit id

使用git rebase -i命令后,會進(jìn)入Git內(nèi)置的vim界面,如下圖所示:

vim操作: i--輸入模式;esc--證明模式;shift+: +wq--保存退出

commit_id操作命令:reword-編輯commit信息;squash-將commit并入前一個commit中,并保留commit信息;fixup-將commit并入前一個commit中,不保留commit信息等。

--> 單純地只編輯上一條寫錯的commit message不合并多個commit信息,可以用:git commit --amend

這四次提交涉及的代碼改動都是需要的,但是只需要一條提交記錄,因此先按“i”鍵進(jìn)入INSERT模式,將后三次commit id前面的“pick”字樣改為“s”(我個人用的是f),只有第一次的commit id前面是“pick”,然后按ESC鍵退出編輯模式,并輸入:wq進(jìn)行保存。注意如果是在Intellij IDEA的Terminal框里編輯rebase信息,那么在按ESC之后光標(biāo)會回到代碼區(qū),此時輸入的“:wq”會寫到代碼里,所以這種情況下按ESC鍵之后,要重新用鼠標(biāo)點一下Terminal框里的區(qū)域,重新把光標(biāo)定位回Terminal框中。
(3)?去除多余的commit描述

在上一個pick與squash編輯界面用:wq保存后,會跳出最后的commit描述編輯界面,如下圖所示

這里按“i”鍵進(jìn)入INSERT模式后,可以把不需要的后三條commit描述用“#”號注釋掉,只留下第一次提交時那條藍(lán)色高亮的“Support”描述,然后用ESC鍵退出編輯模式,再輸入:wq進(jìn)行保存。

(4) 完成rebase

在vim里面的commit操作結(jié)束之后,還要繼續(xù)完成rebase操作,git有三個rebase繼續(xù)命令:continue、skip、abort

git rebase --continue #表示合并順利,可以繼續(xù)完成rebase git rebase --skip #表示rebase過程遇到?jīng)_突,是否要跳過不能合并的沖突 git rebase --abort #表示rebase合并出錯,我要放棄這次rebase操作

rebase過程遇到?jīng)_突很常見,尤其是本地不同commit版本提交過程產(chǎn)生的沖突,我個人強烈不建議用skip跳過。

--> vi xx.file打開沖突文件,手工修改沖突,然后git add xx.file(表示沖突文件已經(jīng)手工修改完畢),這時絕不要git commit!!最后,執(zhí)行g(shù)it rebase --continue完成rebase操作

在rebase過程中,最好每一步用git status觀察rebase狀態(tài),輸入合適的命令

(5)?遠(yuǎn)程強制提交

強制提交原因:因為合并多個commit后,本地版本庫因為少了幾個commits,會與遠(yuǎn)程庫產(chǎn)生different commits沖突,git會建議你用git pull解決本地庫與遠(yuǎn)程庫different commits沖突,絕不!

絕不能辛辛苦苦二十年,一朝回到解放前,你git pull了之后,本地庫又會被遠(yuǎn)程庫同化為原來的多個commit信息。所以必須在rebase完成后,強制push。

在命令行輸入以下命令即可:git push -f origin 分支名git push --force,將遠(yuǎn)程庫的commit記錄強制同化為本地庫的commit記錄。

如果本地分支與遠(yuǎn)程分支關(guān)聯(lián)過,那么其中“origin 分支名”部分可以省略,強制提交后可以看到GitLab上關(guān)于該功能點只有一條commit記錄了。

12. 分支管理

Git分支:Git把每次提交(commit)串成一條時間線,這條時間線就是一個分支。

  • 主分支-master分支:master分支的master指針,用master指針指過的提交(commit)串成一條時間線。
  • 指針-HEAD,指向當(dāng)前分支指針,默認(rèn)是master分支的master指針。

e.g. 一開始的時候,git用master指針指向最新的提交,再用HEAD指針指向master指針,這樣就能確定當(dāng)前分支,以及當(dāng)前分支的提交點。

(1)創(chuàng)建分支

創(chuàng)建分支是在當(dāng)前提交上新建一個分支指針dev,再把HEAD指針指向dev指針,這就表示當(dāng)前分支在dev上。

git checkout -b dev # 創(chuàng)建并切換到dev分支 =git branch dev # 創(chuàng)建分支git checkout dev # 切換到分支dev

或者用switch創(chuàng)建并切換到dev分支

git switch -c dev

(2) 查看分支

git branch*表示當(dāng)前分支

(3)切換分支

git checkout master或git switch master

(4)合并分支

git checkout master git merge dev

(5) 刪除分支

git branck -d dev

總結(jié)

以上是生活随笔為你收集整理的Mac~git学习和应用需要注意的几个点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品二区在线观看 | 99热这里只 | 美女网站一区 | 国产女人水真多18毛片18精品 | 国产精品丝袜黑色高跟鞋 | 免费毛片看片 | 国产黑丝一区 | 性饥渴的农村熟妇 | 日韩激情网站 | 黑人操日本女人视频 | 久久久亚洲欧洲 | 亚洲第一精品网站 | 五十路中出 | 少妇av导航 | 秋霞午夜影院 | 欧美级毛片 | 波多野结衣 一区 | 久久精品久久国产 | 日本精品一区二区在线观看 | 午夜免费在线 | 九九爱精品视频 | 99国产精品人妻噜啊噜 | 国产成人在线播放视频 | 天堂视频在线观看免费 | 永久免费精品 | 精品久久久久久一区二区里番 | 国产精品免费一区二区三区都可以 | 丰满少妇高潮一区二区 | 大学生高潮无套内谢视频 | 久久香蕉网 | 午夜毛片在线观看 | 久久精品视频一区 | 亚洲久久一区 | 黄网在线观看视频 | 国产精品毛片一区二区 | 欧美成人精品一区二区男人看 | 国产日皮视频 | 五月天丁香视频 | 69中国xxxxxxxxx96| 99伊人| 韩国黄色一级片 | 少妇粉嫩小泬喷水视频www | 深夜久久 | 日韩欧美精品在线播放 | 三级小视频在线观看 | 91视频专区 | 91黄色在线视频 | 高清福利视频 | 亚洲人在线观看视频 | 免费毛片网 | 欧美性猛交久久久久 | 国产同性人妖ts口直男 | 秋葵视频成人 | 91精品国产一区二区三竹菊影视 | 91漂亮少妇露脸在线播放 | 在线观看av黄色 | 91精品国产综合久久福利软件 | 国产精品无码AV | 午夜视频大全 | 成人精品三级av在线看 | 少妇激情视频 | 青青青青在线 | 亚洲91在线 | 可以免费看污视频的网站 | 老熟妇午夜毛片一区二区三区 | 日韩资源在线观看 | 中文字幕精品在线视频 | 人人澡人人干 | 亚洲国产精品毛片av不卡在线 | 久久久久99精品成人片试看 | 日韩h视频 | 91精品免费视频 | 草草视频在线观看 | 久久精品视频在线 | 久久av秘一区二区三区 | 久久免费国产视频 | 午夜免费大片 | 成人免费看片39 | 亚洲美女一区 | 日韩影视一区二区三区 | 中文字幕一区二区三区在线观看 | 欧美激情专区 | 午夜免费网 | 色婷婷97 | 超碰成人97 | 一二三区在线播放 | 丝袜人妻一区二区三区 | 亚洲高清色图 | 香蕉久久夜色精品国产使用方法 | 爱操在线 | 在线观看国产区 | 黄色仓库av | 午夜国产免费 | 午夜精品亚洲 | 欧美日韩国产一区二区三区在线观看 | 天天天天天天天干 | 欧美日韩人妻一区二区 | 亚洲乱码国产乱码精品精98午夜 | 女人高潮潮呻吟喷水 |