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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

git的学习笔记(一):git本地操作

發布時間:2023/12/14 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 git的学习笔记(一):git本地操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.Git介紹

  • Git是一個開源的分布式版本控制軟件,用以有效、高速的處理從很小到非常大的項目版本管理。
  • Git 最初是由Linus Torvalds設計開發的,用于管理Linux內核開發。
  • Git 是根據GNU的GPL(通用公共許可證)V2的條款分發的自由/免費軟件,安裝參見:http://git-scm.com/
  • Git本身可以做到版本控制,但其所有版本記錄只能保存在本機,如果想要將文件內容以及版本記錄同時保存在遠程,則需要結合GitHub來使用。
  • GitHub是一個基于Git的遠程文件托管平臺(同GitCafe、BitBucket和GitLab等)。

集中式版本控制系統與分布式版本控制系統的區別

  • 集中式

    版本庫是集中存放在中央服務器,用戶客戶端只有文件的某個版本.
    需要的時候,用戶先從中央服務器下載最新版本的文件到本地電腦,然后開始修改,修改完成后再把自己修改后的版本推送給中央服務器。
    集中式版本控制系統最大的毛病就是必須聯網才能工作,如果客戶端到中央服務器的網絡不好的時候,就會很影響工作的效率.

  • 分布式

    遠程服務器保存所有版本,用戶客戶端也可以保存所有版本
    分布式版本控制系統中每個人的電腦上都有一個完整的版本庫.需要的時候,可以不需要聯網,因為版本庫就在你自己的電腦上。
    多人協同工作的時候,一個用戶在自己電腦上改了文件A,另一個人在他的電腦上改了文件B,工作結束只需把各自的修改推送給對方,就可以互相看到對方的修改了。

2. 配置git的用戶信息

git config --global user.name 'your_name' git config --global user.email 'your_email'

git config的三個作用域

缺省等同于local

git config --local # 只對某個git倉庫有效 git config --global # global對當前用戶所有倉庫有效 git config --system # system對系統所有登錄的用戶有效

顯示config的配置,加--list

git config --list --local git config --list --global git config --list --system

3.git倉庫管理

3.1 初始化git倉庫

1.把已有的項目代碼納入git管理

cd 項目代碼所有文件夾 git init

2.新建的項目直接用git管理

cd 某個文件夾 git init your_project # 會有當前路徑下創建和項目名稱同名的文件夾 cd your_project

3.2 往倉庫里添加文件

git add files # 添加文件 git add . # 把工作區所有文件移動在暫存區 git commit # 提交信息,加上 -a 選項可以把暫存區里的所有文件都進行提交

3.3 文件重命名和刪除

git mv old_file_name new_file_name git rm file_name

3.4 通過git log查看版本演變歷史

查看版本演變歷史的命令

git log可添加的選項:--oneline # 以每一行的方式查看當前分支的所有提交日志--pretty=online # 用commit id(版本號)顯示修改記錄,減少log文件的輸出,使每條記錄只輸出一行-n4 # 以每一行的方式查看當前分支最近的4條提交日志--all # 查看所有分支的提交日志--graph # 以圖形化方式查看提交日志

可以通過gitk圖形界面工具來查看版本歷史

3.5 查看git倉庫的信息

git status 查看當前git倉庫的狀態 git diff * 檢查上一次對文件所做的修改內容 git log 查看版本庫的修改歷史記錄 git reflog 用來記錄每一次命令(查詢某次修改的版本號)

3.6 git的區域狀態說明

工作區:

工作區(word directory)就是在電腦上能看到的目錄 當前開發程序所在的目錄為工作區,該區域的文件會有狀態變化且狀態由git自動檢測 目錄中的文件的任何變化(增,刪,改),git都會檢測到,可以使用git status命令查看

版本庫:

版本庫(repository)工作區有一個隱藏目錄.git,保存的就是git的版本庫 工作區檢測到有文件發生變化,那么意味著文件狀態被改變,這時就可以當做一個版本進行提交

工作區的代碼通過git add來加入到暫存區,使用git commit命令把暫存區的文件加入到當前分支的(一般為git自動創建master的分區)

git的版本庫中一個區域,稱之為stage(或者叫index)的暫存區. 在工作區的文件被修改,使用`git status`查看狀態時,顯示文件的顏色為紅色 使用`git add`把文件從工作區移到暫存區,再使用`git status`查看狀態時,顯示文件的顏色為綠色

3.7 git區域操作

git checkout --filename 撤銷工作區的修改,把工作區的文件恢復到暫存區的狀態如果文件修改后還未放到暫存區,撤消修改就回到未修改之前的狀態如果文件修改后已添加到暫存區,撤消修改就回到添加進暫存區時的狀態 git reset HEAD filename 把暫存區的修改撤消掉,重新放回到工作區,這條命令是在把修改后的文件提交到暫存區之后又后悔了,使文件恢復到版本庫的狀態 git reset HEAD 取消暫存區所有文件 git reset HEAD -- index.html 把暫存區中的index.html恢復成跟工作區一樣,可以添加多個文件 git checkout -- index.html 把工作區恢復成和暫存區一樣 git stash 儲存當前工作現場 git stash list 查看stash區域的所有信息 git stash apply 取出stash區域中的文件放到當前工作區,但是文件還保存在stash區域中,可以反復使用 git stash drop 刪除最近一次儲存的stash git stash pop 取出stash區域中的文件放到當前工作區中,文件不會繼續保存到stash區域中 git stash stash@{num} 恢復指定stash
  • 注意

    • 若誤刪文件時,使用git checkout --filename 來恢復到未刪除之前的狀態
    • 確實要刪除一個文件,使用git rm filename將其從git版本庫中刪除
    • git checkout和git reset都是在將文件add到暫存區,沒有commit時的撤消修改
    • 若已經將文件從暫存區commit到版本庫而未推送到遠程時,可以回退到上一個版本
    • 若文件已經被推送到遠程,則無法撤消

需要注意的是,git是對文件更改的管理,不是基于文件的管理

4.git分支及合并操作

git branch # 查看當前分支并且看到在哪個分支下工作 git branch -v # 查看本地git分支 git branch -av # 查看所有分支及其詳細信息,如果添加遠程倉庫,會顯示遠程倉庫上的分支 git branch dev # 創建一個dev分支 git checkout -b dev # 創建dev分支并切換到dev分支上工作 git checkout -b temp 5ccb4b3 # 基于5ccb4b3這個版本創建一個temp的分支 git checkout -b branch2 branch1 # 基于branch1分支創建并切換到branch2分支 git checkout dev # 切換到dev分支 git checkout master # 切換回master分支 git branch -d dev # 刪除dev分支,刪除分支時,分支相關的信息也會被刪除 git branch -D branch_name # 刪除指定分支,刪除分支時,分支相關的信息也會被刪除 git checkout --* # 把文件返回到修改之前的狀態 git merge dev # 把dev分支合并到當前分支 git merge --no-ff -m "commit_message" dev # 不使用fast forward模式合并dev分支到當前分支

需要注意的是:

  • 1.合并分支的時候如果出現沖突,那么將會出現沖突提醒,此時修改文件,解決沖突后再次提交就可以了
  • 2.可以使用git log或者git log --graph指令來查看分支與分支合并情況
  • 3.通常在合并分支時,一般都是用fast forward模式,但是不能執行快速合并而且不會起沖突,這時合并之后就會做一次新的提交.
  • 4.當基于某個遠程分支創建并切換到新的分支修改并commit之后,如果要提交到遠程分支時,可以直接使用 git push 把本地分支的修改同步到遠程倉庫的指定分支(如果不是基于遠程master分支創建則同步到遠程倉庫時也會同步到遠程非master分支)
  • 5.修復bug時,需要新建并切換到bug分支.bug修復并提交后,合并到主分支,然后將臨時bug分支刪除.此時把臨時bug分支快速合并到主分支后,臨時bug分支里的提交信息就會消失,此時可以不使用快速合并,使用遞歸合并的方式將臨時bug分支提交到主分支,這樣臨時bug分支里的提交信息也可以保留

5.版本回退

git reset --hard HEAD^ 回退到上一個版本 git reset --hard HEAD^^ 回退到上兩個版本 git reset --hard 123456 回退到版本號為123456的版本 git reset --hard commit_id^ 回退到指定commit_id的版本
  • 注意

    • HEAD^為上上一個版本,HEAD表示當前版本
    • 使用git reset命令回退后,再使用log命令將只能獲得當前HEAD版本之前的版本,此時可以使用git reflog找到比當前版本新的版本的commit id就可以回滾回去了
    • log命令可以查看提交歷史,reflog可以查看命令歷史

6.忽略文件的推送

有的時候,提交推送的時候不想提交某些文件,此時可以在這個項目根目錄下新建一個名為.gitignore的文件,

在這個文件里可以進行配置提交的時候忽略哪些文件,配置使用正則表達式的形式.
比如:

*.py 忽略所有的以py結尾的文件 test/a.* 忽略test目錄下所有的以a開頭的文件 test/[abc].py 忽略test目錄下a.py或b.py或c.py這三個文件 [abc] 忽略根目錄下a或b或c這三個文件 test/* 忽略test目錄下的所有文件 !test/a.py 忽略test目錄下不是a.py以外的所有文件,即只提交a.py這個文件

配置完成后,需要清除本地緩存,然后再次提交.

清除本地緩存的命令:

git rm -f --cached .

7.git diff命令

git diff # 比較工作區和暫存區所有文件的差異 git diff 3c6fab966158f9 72ec71f3c2aa # 比較兩次提交的差異 git diff HEAD HEAD~1 # git上一次提交與上上一次提交的差異 git diff HEAD HEAD^1^1 # git上一次提交與前兩次提交的差異 git diff HEAD HEAD~2 # git上一次提交與前兩次提交的差異 git diff HEAD HEAD^1 # git上一次提交與上上一次提交的差異 git diff HEAD HEAD^1 -- index.html # git上一次提交與上上一次提交中index.html文件的不同 git diff -- index.html # 比較工作區和暫存區中的index.html文件的差異 git diff --cached # 修改文件后,把修改的文件添加到暫存區中,查看暫存區和HEAD文件的差異 git diff master dev # 比較master分支和dev分支的差異 git diff master dev -- index.html # 比較index.html文件在master分支和dev分支的差異

兩個分支的位置不同,顯示文件的加減是不同的

8.修改提交的commit

git commit --amend # 修改最新提交的commit信息

9.git rebase操作

9.1 修改任何commit的message信息的步驟

1.列出所有的提交日志

git log --oneline # 每行顯示一條提交記錄 git log --pretty=oneline gitk # 圖形化顯示所有提交記錄

2.進入修改交互模式

git rebase -i 版本號

這里的版本號為:要修改提交信息的版本號的上一個版本號。例如:按提交順序從1到6,如果想修改版本4的提交信息,則此處的版本號應該為第3個版本號
3.進入交互模式后,會有如下提示:

# p, pick <commit> = use commit # r, reword <commit> = use commit, but edit the commit message # e, edit <commit> = use commit, but stop for amending # s, squash <commit> = use commit, but meld into previous commit # f, fixup <commit> = like "squash", but discard this commit's log message # x, exec <command> = run command (the rest of the line) using shell # d, drop <commit> = remove commit # l, label <label> = label current HEAD with a name # t, reset <label> = reset HEAD to a label # m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]

并列出在進入交互式模式時輸入的版本號后的所有提交信息,把想修改的信息之前的pick修改為 r 或者 reword,然后:wq保存并退出

此時會打開想修改的commit的message信息,按vim編輯器的用法修改保存就可以
4.查看修改之后的commit message

git log --oneline

前提是必須要配置全局用戶名和用戶郵箱

9.2 把連續的多個commit合并成一個commit

1.查看所有提交記錄

git log --oneline

2.進入git交互式模式

git rebase -i 版本號

這里的版本號為:要修改提交信息的版本號的上一個版本號。例如:按提交順序從1到6,如果想合并版本4和版本5的提交信息,則此處的版本號應該為第3個版本號
3.進入交互模式后,會有如下提示:

# p, pick <commit> = use commit # r, reword <commit> = use commit, but edit the commit message # e, edit <commit> = use commit, but stop for amending # s, squash <commit> = use commit, but meld into previous commit # f, fixup <commit> = like "squash", but discard this commit's log message # x, exec <command> = run command (the rest of the line) using shell # d, drop <commit> = remove commit # l, label <label> = label current HEAD with a name # t, reset <label> = reset HEAD to a label # m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]

并列出在進入交互式模式時輸入的版本號后的所有提交信息,把被合并的版本號的commit信息前的pick換成 s 或 squash,然后保存并退出

此時會打開合并后的commit提交信息窗口,按vim編輯器的用法修改保存就可以

4.查看修改之后的commit message

git log

可以看到把多個commit合并成一個commit后,所有提交的版本號都改變了

例子:現在有多次提交的版本號v1,版本號v2,版本號v3,版本號v4,版本號v5,版本號v6,想把v2和v3,v4這三次提交合并成一個新的提交,操作步驟:

git rebase -i v1 在打開的文件中,把v2和v3前面的pick修改成s,然后保存并退出 在新打開的窗口中,把未注釋的行的內容修改為合并后想要的新內容,然后保存并退出 使用git log命令查看,就可以看到合并后的提交信息了

總結

以上是生活随笔為你收集整理的git的学习笔记(一):git本地操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。