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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

史上最全Git学习教程

發布時間:2024/7/5 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 史上最全Git学习教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

?

Git是世界上最先進的分布式版本控制系統,沒有之一。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?——?Git愛好者

Git 是一個「分布式版本管理工具」,其具備太多的優點:更方便的 Merge、更方便的管理、更健壯的系統、對網絡的依賴性更低、更少的“倉庫污染”?等等,這使得Git成為協作開發代碼的最優方法。

本文將介紹七十多種常用的 Git 命令與技巧,下面就讓我們一起來領略一下作為一個超過1.1W?Stars的Github項目的魅力吧。

開卷必讀

如果之前未使用過 Git,可以學習 Git 小白教程[1]入門:

  • 一定要先測試命令的效果后,再用于工作環境中,以防造成不能彌補的后果!到時候別拿著砍刀來找我

  • 所有的命令都在git version 2.7.4 (Apple Git-66)下測試通過

  • 統一概念:

    • 工作區:改動(增刪文件和內容)

    • 暫存區:輸入命令:git add 改動的文件名,此次改動就放到了 ‘暫存區’

    • 本地倉庫(簡稱:本地):輸入命令:git commit 此次修改的描述,此次改動就放到了 ’本地倉庫’,每個 commit,我叫它為一個 ‘版本’。

    • 遠程倉庫(簡稱:遠程):輸入命令:git push 遠程倉庫,此次改動就放到了 ‘遠程倉庫’(GitHub 等)

    • commit-id:輸出命令:git log,最上面那行 commit xxxxxx,后面的字符串就是 commit-id

    ?

    目錄

    • 展示幫助信息

    • 回到遠程倉庫的狀態

    • 重設第一個commit

    • 查看沖突文件列表

    • 展示工作區和暫存區的不同

    • 展示暫存區和最近版本的不同

    • 展示暫存區、工作區和最近版本的不同

    • 快速切換到上一個分支

    • 刪除已經合并到 master 的分支

    • 展示本地分支關聯遠程倉庫的情況

    • 關聯遠程分支

    • 列出所有遠程分支

    • 列出本地和遠程分支

    • 查看遠程分支和本地分支的對應關系

    • 遠程刪除了分支本地也想刪除

    • 創建并切換到本地分支

    • 從遠程分支中創建并切換到本地分支

    • 刪除本地分支

    • 刪除遠程分支

    • 重命名本地分支

    • 查看標簽

    • 查看標簽詳細信息

    • 本地創建標簽

    • 推送標簽到遠程倉庫

    • 刪除本地標簽

    • 刪除遠程標簽

    • 切回到某個標簽

    • 放棄工作區的修改

    • 恢復刪除的文件

    • 以新增一個 commit 的方式還原某一個 commit 的修改

    • 回到某個 commit 的狀態,并刪除后面的 commit

    • 修改上一個 commit 的描述

    • 查看 commit 歷史

    • 顯示本地更新過 HEAD 的 git 命令記錄

    • 修改作者名

    • 修改遠程倉庫的 url

    • 增加遠程倉庫

    • 列出所有遠程倉庫

    • 查看兩個星期內的改動

    • 把 A 分支的某一個 commit,放到 B 分支上

    • 給 git 命令起別名

    • 存儲當前的修改,但不用提交 commit

    • 保存當前狀態,包括 untracked 的文件

    • 展示所有 stashes

    • 回到某個 stash 的狀態

    • 回到最后一個 stash 的狀態,并刪除這個 stash

    • 刪除所有的 stash

    • 從 stash 中拿出某個文件的修改

    • 展示所有 tracked 的文件

    • 展示所有 untracked 的文件

    • 展示所有忽略的文件

    • 強制刪除 untracked 的文件

    • 強制刪除 untracked 的目錄

    • 展示簡化的 commit 歷史

    • 查看某段代碼是誰寫的

    • 把某一個分支到導出成一個文件

    • 從包中導入分支

    • 執行 rebase 之前自動 stash

    • 從遠程倉庫根據 ID,拉下某一狀態,到本地分支

    • 詳細展示一行中的修改

    • 清除 .gitignore 文件中記錄的文件

    • 展示所有 alias 和 configs

    • 展示忽略的文件

    • commit 歷史中顯示 Branch1 有的,但是 Branch2 沒有 commit

    • 在 commit log 中顯示 GPG 簽名

    • 刪除全局設置

    • 新建并切換到新分支上,同時這個分支沒有任何 commit

    • 展示任意分支某一文件的內容

    • clone 下來指定的單一分支

    • clone 最新一次提交

    • 忽略某個文件的改動

    • 忽略文件的權限變化

    • 以最后提交的順序列出所有 Git 分支

    • 在 commit log 中查找相關內容

    • 把暫存區的指定 file 放到工作區中

    • 強制推送

    • git 配置 http 和 socks 代理

    • git 配置 ssh 代理

    • 一圖詳解

    • 優雅的提交Commit信息

    • 聯系我

    命令用法

    展示幫助信息

    git help -g

    The command output as below:

    The common Git guides are:attributes Defining attributes per pathcli Git command-line interface and conventionscore-tutorial A Git core tutorial for developerscvs-migration Git for CVS usersdiffcore Tweaking diff outputeveryday A useful minimum set of commands for Everyday Gitglossary A Git Glossaryhooks Hooks used by Gitignore Specifies intentionally untracked files to ignoremodules Defining submodule propertiesnamespaces Git namespacesrepository-layout Git Repository Layoutrevisions Specifying revisions and ranges for Gittutorial A tutorial introduction to Gittutorial-2 A tutorial introduction to Git: part twoworkflows An overview of recommended workflows with Git'git?help?-a'?and?'git?help?-g'?list?available?subcommands?and?some?concept?guides.?See?'git?help?<command>'?or?'git?help?<concept>'?to?read?about?a?specific?subcommand?or?concept.

    回到遠程倉庫的狀態

    拋棄本地所有的更改,回到遠程倉庫的狀態。

    git?fetch?--all?&&?git?reset?--hard?origin/master

    重設第一個 commit

    也就是把所有的改動都重新放回工作區,并清空所有的 commit,這樣就可以重新提交第一個 commit 了。

    git update-ref -d HEAD

    顯示工作區和暫存區的不同

    輸出工作區和暫存區的 different (不同)。

    git diff

    還可以顯示本地倉庫中任意兩個 commit 之間的文件變動:

    git diff <commit-id> <commit-id>

    顯示暫存區和最近版本的不同

    輸出暫存區和本地最近的版本 (commit) 的 different(不同)。

    git diff --cached

    顯示暫存區、工作區和最近版本的不同

    輸出工作區、暫存區 和本地最近的版本 (commit) 的 different (不同)。

    git?diff?HEAD

    快速切換到上一個分支

    git?checkout?-

    移除已經合并到 master 的分支

    git?branch?--merged?master?|?grep?-v?'^\*\|?master'?|?xargs?-n?1?git?branch?-d

    顯示本地分支關聯遠程倉庫的情況

    git?branch?-vv

    關聯遠程分支

    關聯之后,git branch -vv 就可以顯示關聯的遠程分支名了,同時 Push 到遠程倉庫直接:git push,不需要指定遠程倉庫了。

    git?branch?-u?origin/mybranch

    或者在 push 時加上 -u 參數

    git?push?origin/mybranch?-u

    舉出所有遠程分支

    -r 參數相當于:remote

    git?branch?-r

    舉出本地和遠程分支

    -a 參數相當于:all

    git?branch?-a

    構建并切換到本地分支

    git?checkout?-b?<branch-name>

    從遠程分支中構建并切換到本地分支

    git?checkout?-b?<branch-name>?origin/<branch-name>

    移除本地分支

    git?branch?-d?<local-branchname>

    移除遠程分支

    git?push?origin?--delete?<remote-branchname>

    或者

    git?push?origin?:<remote-branchname>

    重命名本地分支

    git?branch?-m?<new-branch-name>

    查看標簽

    git?tag

    顯示當前分支的最近的 tag

    git?describe?--tags?--abbrev=0

    查看標簽詳細信息

    git?tag?-ln

    本地構建標簽

    git?tag?<version-number>

    默認 tag 是打在最近的一次 commit 上,如果需要指定 commit 打 tag:

    $?git?tag?-a?<version-number>?-m?"v1.0?發布?(描述)"?<commit-id>

    Push?標簽到遠程倉庫

    首先要保證本地構建好了標簽才可以 Push 標簽到遠程倉庫:

    git?push?origin?<local-version-number>

    一次性 Push 所有標簽,同步到遠程倉庫:

    git?push?origin?--tags

    移除本地標簽

    git?tag?-d?<tag-name>

    移除遠程標簽

    移除遠程標簽需要先移除本地標簽,再執行下面的命令:

    git?push?origin?:refs/tags/<tag-name>

    切回到某個標簽

    一般上線之前都會打 tag,就是為了防止上線后出現問題,方便快速回退到上一版本。下面的命令是回到某一標簽下的狀態:

    git?checkout?-b?branch_name?tag_name

    放棄工作區的更改

    git?checkout?<file-name>

    放棄所有更改:

    git?checkout?.

    恢復移除的文件

    git?rev-list?-n?1?HEAD?--?<file_path>?#?得到?deleting_commit git checkout <deleting_commit>^ -- <file_path> # 回到移除文件 deleting_commit 之前的狀態

    以新增一個 commit 的方式還原某一個 commit 的更改

    git revert <commit-id>

    回到某個 commit 的狀態,并移除后面的 commit

    和 revert 的區別:reset 命令會抹去某個 commit id 之后的所有 commit

    git?reset?<commit-id>?# 默認就是-mixed 參數。 git?reset?–mixed?HEAD^?# 回退至上個版本,它將重置 HEAD 到另外一個 commit, 并且重置暫存區以便和 HEAD 相匹配,但是也到此為止。工作區不會被更改。 git?reset?–soft?HEAD~3?# 回退至三個版本之前,只回退了 commit 的信息,暫存區和工作區與回退之前保持一致。如果還要提交,直接 commit 即可 git reset –hard <commit-id> # 徹底回退到指定 commit-id 的狀態,暫存區和工作區也會變為指定 commit-id 版本的內容

    更改上一個 commit 的描述

    如果暫存區有改動,同時也會將暫存區的改動提交到上一個 commit

    git commit --amend

    查看 commit 歷史

    git log

    查看某段代碼的貢獻者

    blame 的意思為『責怪』,你懂的。

    git blame <file-name>

    顯示本地更新過 HEAD 的 git 命令記錄

    每次更新了 HEAD 的 git 命令比如 commint、amend、cherry-pick、reset、revert 等都會被記錄下來(不限分支),就像 shell 的 history 一樣。這樣你可以 reset 到任何一次更新了 HEAD 的操作之后,而不僅僅是回到當前分支下的某個 commit 之后的狀態。

    git reflog

    更改作者名

    git?commit?--amend?--author='Author?Name?<email@address.com>'

    更改遠程倉庫的 url

    git remote set-url origin <URL>

    增加遠程倉庫

    git remote add origin <remote-url>

    舉出所有遠程倉庫

    git remote

    查看兩個星期內的改動

    git whatchanged --since='2 weeks ago'

    把 A 分支的某一個 commit,放到 B 分支上

    這個過程需要 cherry-pick 命令,參考[2]

    git?checkout?<branch-name>?&&?git?cherry-pick?<commit-id>

    給 git 命令起別名

    簡化命令

    git?config?--global?alias.<handle>?<command> 比如:git status 改成 git st,這樣可以簡化命令 git config --global alias.st status

    保存當前的更改,但不用提交 commit

    詳解可以參考廖雪峰老師的 git 教程

    git stash

    儲存當前狀態,包括 untracked 的文件

    untracked 文件:新建的文件

    git stash -u

    顯示所有 stashes

    git stash list

    回到某個 stash 的狀態

    git stash apply <stash@{n}>

    回到最后一個 stash 的狀態,并移除這個 stash

    git stash pop

    移除所有的 stash

    git stash clear

    從 stash 中拿出某個文件的更改

    git checkout <stash@{n}> -- <file-path>

    顯示所有 tracked 的文件

    git ls-files -t

    顯示所有 untracked 的文件

    git ls-files --others

    顯示所有忽略的文件

    git?ls-files?--others?-i?--exclude-standard

    強制移除 untracked 的文件

    可以用來移除新建的文件。如果不指定文件文件名,則清空所有工作的 untracked 文件。clean 命令,注意兩點:

    1. clean 后,移除的文件無法找回

    2. 不會影響 tracked 的文件的改動,只會移除 untracked 的文件

    git?clean?<file-name>?-f

    強制移除 untracked 的目錄

    可以用來移除新建的目錄,注意:這個命令也可以用來移除 untracked 的文件。詳情見上一條。

    git clean <directory-name> -df

    顯示簡化的 commit 歷史

    git?log?--pretty=oneline?--graph?--decorate?--all

    把某一個分支導出成一個文件

    git?bundle?create?<file>?<branch-name>

    從包中導入分支

    新建一個分支,分支內容就是上面 git bundle create 命令導出的內容

    git?clone?repo.bundle?<repo-dir>?-b?<branch-name>

    執行 rebase 之前自動 stash

    git?rebase?--autostash

    從遠程倉庫根據 ID,拉下某一狀態,到本地分支

    git?fetch?origin?pull/<id>/head:<branch-name>

    詳細顯示一行中的更改

    git?diff?--word-diff

    清除 gitignore 文件中記錄的文件

    git?clean?-X?-f

    顯示所有 alias 和 configs

    注意:config 分為:當前目錄(local)和全局(golbal)的 config,默認為當前目錄的 config

    git config --local --list (當前目錄) git config --global --list (全局)

    顯示忽略的文件

    git?status?--ignored

    commit 歷史中顯示 Branch1 有的,但是 Branch2 沒有 commit

    git?log?Branch1?^Branch2

    在 commit log 中顯示 GPG 簽名

    git?log?--show-signature

    移除全局設置

    git?config?--global?--unset?<entry-name>

    新建并切換到新分支上,同時這個分支沒有任何 commit

    相當于儲存更改,但是重寫 commit 歷史

    git?checkout?--orphan?<branch-name>

    顯示任意分支某一文件的內容

    git?show?<branch-name>:<file-name>

    clone 下來指定的單一分支

    git?clone?-b?<branch-name>?--single-branch?https://github.com/user/repo.git

    忽略某個文件的改動

    關閉 track 指定文件的改動,也就是 Git 將不會在記錄這個文件的改動

    git?update-index?--assume-unchanged?path/to/file

    恢復 track 指定文件的改動

    git?update-index?--no-assume-unchanged?path/to/file

    忽略文件的權限變化

    不再將文件的權限變化視作改動

    git?config?core.fileMode?false

    以最后提交的順序舉出所有 Git 分支

    最新的放在最上面

    git?for-each-ref?--sort=-committerdate?--format='%(refname:short)'?refs/heads/

    在 commit log 中查找相關內容

    通過 grep 查找,given-text:所需要查找的字段

    git?log?--all?--grep='<given-text>'

    把暫存區的指定 file 放到工作區中

    不添加參數,默認是 -mixed

    git?reset?<file-name>

    強制?Push

    git?push?-f?<remote-name>?<branch-name>

    ?

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的史上最全Git学习教程的全部內容,希望文章能夠幫你解決所遇到的問題。

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