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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

10个节省时间和改善工作流的Git技巧

發布時間:2024/1/23 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 10个节省时间和改善工作流的Git技巧 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

根據手冊,Git 被定義為傻瓜式內容追蹤器,它功能豐富,但有些功能卻讓人望而生畏。因此,我們只是重復使用那幾個被記住的命令,而沒有充分使用。

https://manpages.debian.org/stretch/git-man/git.1.en.html

技巧 1:優化配置

Git 在全局、用戶和本地級別上都是高度可配置的。

https://git-scm.com/docs/git-config

查找順序

每個設置都可以被覆蓋:

$CWD/.git/config ▼ ▼ ▼ $HOME/.gitconfig` ▼ ▼ ▼ $HOME/.config/git/config ▼ ▼ ▼ /etc/gitconfig

修改設置

用你喜歡的編輯器或者 CLI 編輯任何配置文件:

# 全局設置 git config --global <keypath> <value> # 本地設置 git config <keypath> <value>

如果值包含空格字符,則需要用引號引起來。

顯示當前設置

# 顯示當前設置及其來源 git config --list --show-origin

一些有用的配置

# 設定身份 git config --global user.name "<your name>" git config --global user.email <your email> # 首選編輯器 git config --global core.editor vim # 證書緩存 # WINDOWS git config --global credential.helper manager # LINUX (超時時間——以秒為單位) git config --global credential.helper "cache --timeout=3600" # MACOS git config --global credential.helper osxkeychain

https://git-scm.com/docs/gitcredentials

技巧 2:別名(alias)

創建一個別名來保存常用的 git 命令:

# 創建別名 git config --global alias.<alias-name> "<git command>" # 使用別名 git <alias-name> <more optional arguments>

一些有用的別名

# 撤銷上次提交 git config --global alias.undo "reset --soft HEAD^" # 將暫存區更新修訂到上次提交 (不改變提交信息) git config --global alias.amend "commit --amend --no-edit" # 壓縮的狀態輸出 git config --global alias.st "status -sb" # 用 GRAPH 為日志著色 git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'" # 刪除所有已合并的分支 git config --global alias.rmb "!git branch --merged | grep -v '*' | xargs -n 1 git branch -d" # 貢獻排行 git config --global alias.rank "shortlog -n -s --no-merges"

技巧 3:查找 Commits 和更改

通過 Commits 信息查找

# 通過 commit 信息查找 (所有分支) git log --all --grep='<search term>' # 通過 commit 信息查找 (包含 reflog) git log -g --grep='<search term>'

通過更改查找

# 通過更新的內容查找 git log -S '<search term>'

通過日期查找

# 通過日期范圍查找 git log --after='DEC 15 2019' --until='JAN 10 2020'

技巧 4:添加 hunk

git add <filepath>不僅能添加文件的所有變更,--path / -p參數還可以交互式暫存區塊。

# 補丁命令 y = 暫存區塊 n = 不暫存這個區塊 q = 退出 a = 暫存當前文件的此區塊以及所有剩余區塊 d = 不暫存當前文件的此區塊以及所有剩余區塊 / = 查找區塊 (正則表達式) s = 劃分成更小的區塊 e = 手動編輯區塊 ? = 打印幫助說明 g = 選擇要前往的區塊 j = 將區塊設為未定,查看下一個未定區塊 J = 將區塊設為未定,查看下一個區塊 k = 將區塊設為未定,查看上一個未定區塊 J = 將區塊設為未定,查看下一個區塊

https://git-scm.com/docs/git-add#Documentation/git-add.txt--i

技巧 5:儲藏(stash)更改而不提交

stash 將當前的更改臨時擱置起來。在它的幫助下,可以返回當前狀態的索引,并能在稍后應用已儲藏的更改。

默認情況下,僅儲藏當前跟蹤文件中的更改,新文件將被忽略。

我們可以獨立地創建和應用多個 stash。

https://git-scm.com/docs/git-stash

創建

# 創建新的 STASH git stash # 創建新的 STASH (包含未追蹤的更改) git stash -u/--include-untracked # 創建新的 STASH 并命名 git stash save "<stash name>" # 交互式儲藏 git stash -p

羅列

# 列出所有的 STASH (為其他命令提供"n") git stash list

瀏覽

# 瀏覽 STASH 內容 git stash show # 瀏覽 STASH 差異 git stash show -p

應用

# 應用上一個 STASH (刪除 stash) git stash pop # 應用上一個 STASH (保留 stash) git stash apply # 應用特定的 STASH (n = stash 列表序號) git stash pop/apply stash@{n} # 從 STASH 創建新的分支 (n = stash 列表序號) git stash branch <new branch name> stash@{n} # 從 STASH 應用單個文件 (n = stash 列表序號) git checkout stash@{n} -- <filepath>

清理

# 刪除特定的 STASH (n = stash 列表序號) git stash drop stash@{n} # 刪除所有的 STASH git stash clear

技巧 6:空運行(Dry Run)

許多 git 操作可能具有破壞性,例如,git clean -f將刪除所有未跟蹤的文件,而且無法恢復。

要避免出現這種災難性的結果,許多命令都支持dry-run,可以在實際產生結果前對其進行檢查。不過遺憾的是,使用的選項不完全一致:

git clean -n/--dry-run git add -n/--dry-run git rm -n/--dry-run # GIT MERGE 模擬 DRY-RUN git merge --no-commit --no-ff <branch> git diff --cached git merge --abort

請注意,git commit -n根本不是dry-run!它實際上是--no-verify,作用是忽略所有pre-commit/commit-msg githooks。

技巧 7:安全強制推送

在處理舊的 commit、創建新的 head 等情況時時很容易弄亂分支。git push --force可以覆蓋遠程變更,但不應該這樣做!

git push --force是一種具有破壞性且危險的操作,因為它無條件生效,并且會破壞其他提交者已經推送的所有 commit。這對于其他人的代碼倉庫來說不一定是致命的,但是改變歷史記錄并影響其他人并不是一個好主意。

更好的選擇是使用git push --force-with-lease。

git 不會無條件地覆蓋上游的遠程倉庫,而是檢查是否有本地不可用的遠程更改。如果有,它會失敗并顯示一條“stale info”消息,并告訴我們需要先運行git fetch。

https://git-scm.com/docs/git-push#Documentation/git-push.txt---force-with-leaseltrefnamegt

技巧 8:修改 commit 信息

Commit 是不可變的,且不能更改。不過可以用一條新的 commit 信息修訂現有的 commit,這會覆蓋原始 commit,因此請勿在已推送的 commit 中使用它。

git commit --amend -m "<new commit message>"

https://git-scm.com/docs/git-commit#Documentation/git-commit.txt---amend

技巧 9:修改歷史

修改代碼倉庫的歷史不僅限于修改上次提交信息,使用git rebase可以修改多個提交:

# 提交的范圍 git rebase -i/--interactive HEAD~<number of commits> # 該 hash 之后的所有提交 git rebase -i/--interactive <commit hash>

在配置的編輯器中倒序列出所有的 commit,像這樣:

# <command> <commit hash> <commit message> pick 5df8fbc revamped logic pick ca5154e README typos fixed pick a104aff added awesome new feature

通過更改編輯器中的實際內容,可以為 git 提供一個方案,來說明如何進行 rebase:

# p, pick = 使用提交而不更改 # r, reword = 修改提交信息 # e, edit = 編輯提交 # s, squash = 匯合提交 # f, fixup = 類似"squash",但是會丟棄提交信息 # x, exec = 運行命令 (其余行) # d, drop = 移除提交

保存編輯器后,git 將運行該方案以重寫歷史記錄。e, edit會暫停 rebase,就可以編輯代碼倉庫的當前狀態。完成編輯后,運行git rebase --continue。

如果過程中出現問題(例如合并沖突),我們需要重新開始,可以使用git rebase --abort。

https://git-scm.com/docs/git-rebase

技巧 10:存檔跟蹤文件

可以使用不同格式(zip或tar)來壓縮特定引用的跟蹤文件:

git archive --format <format> --output <filename> <ref>

<ref>可以是一個分支、commit hash 或者一個標簽。

https://git-scm.com/docs/git-archive

額外提醒:單破折號

有一個快捷方式可以表示剛用過的分支:一個單破折號-

git checkout my-branch # 當前分支:my-branch <do some git operations, e.g. adding/commiting> git checkout develop # 當前分支:develop git merge - # 將 my-branch 合并到 develop

單破折號等同于@{-1}。

Git - git-checkout Documentation

總結

Git 還有很多話題可談,這里只涉及一些皮毛。在另一篇文章中,我想展示如何用git bisect有效查找損壞的 commit,或者如何通過git reflog來運用任意git操作的完整歷史記錄。

總結

以上是生活随笔為你收集整理的10个节省时间和改善工作流的Git技巧的全部內容,希望文章能夠幫你解決所遇到的問題。

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