簡體   English   中英

Git:有沒有辦法 git stash 但能夠指定分支名稱?

[英]Git: Is there a way to git stash but be able to specify a branch name?

我正在進行一些更改,但我不確定。 他們可能是正確的前進方式,但也許我走錯了路。 我想保存我的工作,以防萬一我做正確的事情,但現在不繼續這條開發線,例如回到半小時前的位置。 基本上,做一個 stash 但讓 stash 提交一個具有描述性名稱的真實分支。

就像是

git stash save-stuff  // not a valid command

我一直在做的需要多個命令

git commit -a -m 'not sure this is where I want to go'
git checkout -b save-stuff
git checkout original-branch // return to original branch
git reset --hard HEAD~1 // I don't always do this one.

這讓我很不高興。

Git 歷史總是分層的,這也適用於git stash git stash創建一個新的提交,相對於一個特定的提交,而不是一個分支。 因此,無需使用特定名稱保存 Git 存儲; 這樣做,你實際上是在創建一個分支。

如果您希望能夠保存您不確定是否正確的臨時工作,最好的辦法是使用分支 這樣做將允許您和在存儲庫上工作的其他任何人(如果您將分支推送到原點)能夠輕松地參考該時間點。 如果發現您的方法是正確的,您可以對該分支進行后續更改,甚至可以壓縮更改以使其看起來有問題的提交從未存在過。

請記住,沒有什么可以阻止您檢查單個提交- 即使在您當前正在處理的分支上也是如此。 這將允許您在需要時恢復,並且您可以從這個舊提交繼續工作,如果需要,甚至可以推送到同一個分支。

兩個步驟:

  • git stash有一個子命令git stash create ,它基本上創建與git stash相同的提交,但不會更新存儲並且不會觸及您的索引或工作樹
  • git update-ref允許您“更新”一個引用(例如:分支)而不是當前活動分支

您可以在腳本中將兩者結合起來:

# file git-snap:

#!/bin/bash

if git diff -s --exit-code HEAD; then
    echo " --- worktree is clean, nothing to save"
    exit 0
fi

# get name of active branch, to update a branch named wip/<branch> :
branch=$(git rev-parse --abbrev-ref HEAD)
ref="refs/heads/wip/$branch"

# call git stash create:
sha=$(git stash create)
# update a branch named 'wip/<branch>' :
git update-ref -m "save wip on $branch" "$ref" "$sha"

git log --oneline -1 "$ref"

(如果你把上面的git-snap腳本放在你的 PATH 上,你可以簡單地調用git snap

或者如果你喜歡一個班輪:

git update-ref refs/heads/mystash $(git stash create)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM