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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

GIT速查手册

發(fā)布時間:2023/12/9 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GIT速查手册 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

一、GIT

1.1 簡單配置

git是版本控制系統(tǒng),與svn不同的是git是分布式,svn是集中式

配置文件位置

# 配置文件 .git/config 當前倉庫的配置文件 ~/.gitconfig 全局配置文件# 查看所有配置項 git config --list

友好的查看日志

# 設置別名 # 友好的查看日志 git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --all"git log --decorate --oneline --graph --all git lg

設置用戶名和郵箱

# 設置用戶名和郵箱 git config --global user.name "xxx" git config --blobal user.email "xxx@xxx.com"

1.2 工作區(qū)和暫存區(qū)

工作區(qū)(Working Directory)是當前文件夾,當前文件夾下的.git文件夾是版本庫(Repository)。版本庫里有很多東西,其中有

  • 最重要的就是暫存區(qū)(stage或index)
  • Git為我們自動創(chuàng)建的第一個分支master
  • 指向master的一個指針叫HEAD
  • 工作區(qū)--暫存區(qū)(stage/index)--當前分支(master)--遠程庫

    關系圖

    版本說明

    HEAD 當前版本 HEAD^ 上一版本 HEAD^^ 上上版本 HEAD~100 往上100個版本

    1.3 add/commit/diff/reset

    add命令

    commit命令

    diff命令

    reset

    二、常用命令

    2.1 init/add/commit/status/log

    init

    cd learngit git init# 在某目錄下執(zhí)行命令后,該目錄會生成一個.git的隱藏文件夾,這個目錄就是一個版本庫了 # 所有版本控制系統(tǒng)只能跟蹤文本文件的發(fā)動 # 如TXT文件中刪除了第4行,圖片等二進制文件作為一個整體 # 統(tǒng)一用UTF-8編碼

    add

    # 添加一個文件到暫存區(qū)(Stage) vi readme.txt git add readme.txt

    commit

    # 將文件提交給HEAD git commit -m 'wrote a readme file'# 不產生新快照的提交 git commit --amend

    查看狀態(tài)

    git status # 通過該命令可以清楚的了解當前版本庫中的文件處于什么狀態(tài)

    查看歷史

    git log git log --pretty=oneline git lg # 自定義的一個別名,參照 簡單設置git reflog # 查看執(zhí)行的每一條命令

    2.2 文件對比

    準備

    # 工作區(qū)的readme.txt Git is a distributed version control system. Git is free software distributed under the GPL. Git has a mutable index called stage. Git tracks changes of files. # 暫存區(qū)的readme.txt Git is a distributed version control system. Git is free software distributed under the GPL. Git has a mutable index called stage. Git tracks changes of files by stage. # master的readme.txt Git is a distributed version control system. Git is free software distributed under the GPL. Git has a mutable index called stage. Git tracks changes.

    比較工作區(qū)與暫存區(qū)中的文件

    git diff -- readme.txt

    比較工作區(qū)與版本庫中的文件

    git diff HEAD -- readme.txt

    比較暫存區(qū)與版本庫

    git diff --cached HEAD

    比較兩個歷史快照

    git diff id1 id2

    2.3 版本回退

    有如下幾個版本:

    查看歷史記錄是這樣的:

    回退到指定版本:

    git reset HEAD^/comment_id # comment_id,ID號,前7位,可以通過git reflog和git log命令進行查看

    版本庫覆蓋xxx

    # 工作區(qū)----暫存區(qū)(stage)----版本庫(HEAD)----服務器 # 三種模式soft/mixed/hard,默認是mixed# 版本庫里上一版本覆蓋最新版本 git reset --soft HEAD^ # 1.移動HEAD的指向,將其指向上一個快照# 版本庫上一版本覆蓋最新版本和暫存區(qū) git reset --mixed HEAD^ # 1.移動HEAD的指向,將其指向上一個快照 # 2.將HEAD移動后指向的快照回滾到暫存區(qū)域# 版本庫上一版本覆蓋最新版本和暫存區(qū)和工作區(qū) git reset --hard HEAD^ # 1.移動HEAD的指向,將其指向上一個快照 # 2.將HEAD移動后指向的快照回滾到暫存區(qū)域 # 3.將暫存區(qū)域的文件還原到工作目錄

    暫存區(qū)覆蓋工作區(qū)

    # 暫存區(qū)的內容覆蓋工作區(qū)(丟棄工作區(qū)的修改) # 撤銷工作區(qū)的修改 # 沒有--,該命令就是切換分支的命令了 git checkout -- readme.txt

    版本庫覆蓋暫存區(qū)

    # 版本庫的內容覆蓋暫存區(qū)(丟棄暫存區(qū)的修改) # 撤銷暫存區(qū)的修改 git reset HEAD readme.txt

    2.4 暫存區(qū)修改

    這樣一種場景:工作區(qū),暫存區(qū),版本庫里內容一樣,類似.project類似這種eclipse的項目配置文件也存在于版本控制中,現(xiàn)在把.project這類文件加入到忽略名單后

    # 這個命令是把.project從暫存區(qū)中刪除 git rm --cached .project # 提交暫存區(qū) git commit -m "delete .project"

    2.5 刪除/重命名

    # 只能刪除工作區(qū)和暫存區(qū)中的文件 git rm filename# git rm readme.txt與如下兩個命令等價 rm readme.txt git add readme.txt# 如果工作區(qū)和暫存區(qū)中的文件內容不同時,下面兩個命令可把兩個都刪除 git rm -f filename git rm --cached filename# 重命名 git mv filename1 filename2

    三、遠程倉庫

    3.1 免登錄設置

    Windows下生成ssh-keygen

    1.安裝Git 2.打開Git Bash 3.輸入 ssh-keygen -t rsa -C "your email"

    Linux下生成ssh-key

    ssh-keygen -t rsa -C "your email" cat ~/.ssh/id_rsa.pub # ~/.ssh/id_rsa 這是私鑰 # ~/.ssh/id_rea.pub 這是公鑰# 驗證 ssh -T git@git.oschina.net

    3.2 遠程庫命令

    關聯(lián)遠程倉庫

    # 把本地倉庫與遠程倉庫相關聯(lián) git remote add origin git@github.com:yysue/learngit.git # yysue:github賬戶名或gitee賬戶名 # origin:遠程庫的名字,這是Git默認的叫法# 關聯(lián)分支 git branch --set-upstream-to=origin/master master # 將本地的master分支與遠程origin庫的master分支關聯(lián)# pull,第一次pull加--allow-unrelated-histories # https://stackoverflow.com/questions/37937984/git-refusing-to-merge-unrelated-histories-on-rebase git pull --allow-unrelated-histories

    直接修改配置

    # 當前版本庫目錄下 $ cat .git/config [core]repositoryformatversion = 0filemode = falsebare = falselogallrefupdates = truesymlinks = falseignorecase = true [remote "origin"]url = git@git.oschina.net:yysue/mysqldba.gitfetch = +refs/heads/*:refs/remotes/origin/* [branch "master"]remote = originmerge = refs/heads/master

    查看遠程庫

    git remote -v

    推送到遠程庫

    git push -u origin master # 把本地所有內容推送到遠程庫上 # -u參數(shù),不但會把本地master分支推送到遠程master分支,還會把本地master分支與遠程master分支相關聯(lián) # 第一次推送用-u,以后用就可以不用了 git push origin master

    從遠程庫抓取

    git pull origin master

    從遠程庫克隆

    git clone git@github.com:h2o1k/gitskills.git ssh協(xié)議,速度快 git clone https://github.com/h2o1k/gitskills.git https協(xié)議

    遠程倉庫強制覆蓋本地文件

    git fetch --all git reset --hard origin/master git pull

    四、分支管理

    4.1 branch/checkout/merge

    查看master分支

    master分支是一條線,Git用master指向最新的提交,再用HEAD指向master,就能確定當前分支,以及當前分支的提交點

    創(chuàng)建并切換到dev分支

    # 查看當前分支的命令 git branchgit checkout -b dev # -b 表示創(chuàng)建并切換,與下面兩條命令等價 git branch dev git checkout dev# 再查看一下分支 git branch

    在dev分支提交

    vi dev.txt Creating a new branch is quick.git add dev.txt git commit -m "add dev.txt"

    切換到master分支

    git checkout master

    dev合并到master

    git merge dev -m "merge dev" # merge合并指定分支到當前分支, # so,必須在master分支下執(zhí)行上述命令

    保留分支信息的合并

    git merge --no-ff -m "merge" dev # --no-ff會保留分支信息

    通常,分支合并時,Git會用Fast forward模式,這種模式下,刪除分支后,會丟失分支信息,禁用Fast forward模式,Git就會在merge時生成一個新的commit,這樣,從分支歷史上就可以看出分支信息

    刪除dev分支

    git branch -d dev

    產生沖突

    master分支和feature1都有新的提交

    解決沖突

    編輯沖突文件,然后再添加、提交、合并,最后刪除分支feature1

    查看日志

    分支管理策略

    4.2 stash

    我們有時會遇到這樣的情況,正在分支a上開發(fā)一半,然后分支b上發(fā)現(xiàn)Bug,需要馬上處理。

    這時候分支a上的修改怎么辦呢,git add 是不行的,有的git客戶端版本會提示還有add過的文件沒提交不能切換分支,有的git客戶端版本會把修改帶到b分支。

    git stash 就是解決這個問題,它把當前工作區(qū)的修改和git add的內容都保存到一個地方,然后git reset HEAD,使工作區(qū)回到上一次提交,處于干凈狀態(tài)。然后就可以很放心的切到另外的分支b干活了。

    git stash save “先給我保存一下,我要去別的分支修bug” git stash list # 切換到其他分支去修改bug # ... # 再切換到打stash的分支 git stash pop # git stash pop相當于執(zhí)行git stash apply和git stash drop git stash apply stash@{num}

    4.3 rebase

    有的時候我們在一個分支a開發(fā)的時候,master已經(jīng)進入了很多修改,這時候如果把a的修改提交上去,可能就會跟主干有沖突,需要在主干解決沖突才能提交,這樣比較難看。

    這時候git rebase就有用了,git rebase BRANCH_NAME可以把BRANCH_NAME分支的修改帶到當前分支來,這樣當前分支就有了BRANCH_NAME分支的所有內容,這樣在當前分支開發(fā)的內容提交以后不會跟BRANCH_NAME有沖突,沖突在當前分支就可以解決。

    4.4 小技巧

    可以取消已經(jīng)提交的commit,一般我們只用git reset HEAD^。因為每個分支可能開發(fā)過程中為了保存過程以便回溯會有很多commit,但是我們要求進入主干時,每個功能和bugfix只能有一個提交,因此可以先用git reset退回到最早的commit,然后把自己的修改最后打包成一個commit,再去跟主干合并。

    利用這兩個命令,我們可以很好的管理我們的MySQL開發(fā)。我們只有一個master分支作為主干,不允許在主干上直接開發(fā)。每個同學根據(jù)feature和bug的issue建立分支,然后在分支上開發(fā),不管開發(fā)過程中有多少個commit,我們要求最終提交每個bugfix或feature只能有一個提交。因此每個同學完成開發(fā)后,都需要git reset 退到最早的commit,git stash save寶存一下自己的修改,然后git checkout master; git pull拖一下最新的主干,然后返回自己的分支,再做git rebase master,把當前分支推進到主干,最后git stash pop彈出修改,有沖突則在當前分支解決,再git push。

    # 此時commit id為a37b9ff,切換到開發(fā)版本dev git checkout -b dev # 實現(xiàn)了一個功能xxx,期間多次commit ... # xxx開發(fā)完畢后,合并到主分支要求只有一個commit git reset a37b9ff git stash save "保存開發(fā)功能xxx的修改" git checkout master git pull git checkout dev git rebase master git stash pop # 處理沖突 git add . git commit -m "功能xxx" git checkout master git merge --no-ff -m "merge 功能xxx" dev

    4.5 常用分支命令

    # 查看當前分支 git branch # 創(chuàng)建分支dev git branch dev # 切換到分支dev git checkout dev # 創(chuàng)建并切換到分支dev git checkout -b dev # 合并指定分支(dev)到當前分支 git merge dev # 刪除分支dev, 如果分支有未提交的這樣刪除不了 git branch -d dev # 強制刪除 git branch -D dev # 查看分支合并情況 git log --pretty=oneline --graph --abbrev-commit # master轉gh-pages # 創(chuàng)建一個沒有父節(jié)點的分支gh-pages git checkout --orphan gh-pages

    五、標簽管理

    5.1 常用標簽命令

    # 切換到要打標簽的分支上 git branch git checkout master# 打標簽 git tag v1.0# 默認標簽是打在最新提交的commit上,也可以指定commit id # git log --pretty=oneline --abbrev-commit git tag v0.9 <commit id># 查看標簽列表 git tag# 查看某標簽信息 git show v0.9# 標簽加注釋 git tag -a v0.1 -m "version 0.1 released" 2428164# 可以用PGP簽名標簽 git tag -s v0.2 -m "signed version 0.2 released" fac145a# 刪除標簽 git tag -d v0.1# 把標簽推送到服務器 git push origin v1.0# 一次性推送全部尚未推送的本地標簽 git push origin --tags# 刪除遠程庫標簽 # 先刪除本地標簽 git tag -d v0.9 # 再刪除遠程庫標簽 git push origin :refs/tags/v0.9

    六、使用GitHub

    6.1 Fork/克隆

    七、自定義Git

    # 如果一個jar文件已經(jīng)加到忽略文件里邊了 # 想把一個jar文件添加到版本庫 git add -f aaa.jar

    八、問題

    8.1 注釋輸入不了中文了

    # Git安裝目錄 D:\Program Files\Git # 編輯如下文件D:\Program Files\Git\etc\inputrc # 確保如下行的配置如下,就可以保證輸入中文注釋了 set output-meta on set convert-meta off

    九、參考

    • Git教程-廖雪峰
    • 一些Git操作的技巧

    轉載于:https://my.oschina.net/yysue/blog/1635600

    總結

    以上是生活随笔為你收集整理的GIT速查手册的全部內容,希望文章能夠幫你解決所遇到的問題。

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