簡體   English   中英

如何確保所有內容都已用 git 推送?

[英]How to ensure everything has been pushed with git?

我喜歡從我的計算機上刪除我不工作的 repos。 我檢查了一些東西,我處理它,當我完成時,我推送所有內容並從我的計算機中刪除該文件夾。 這樣事情就會保持整潔,很容易大致了解我實際在做什么,而且我知道我沒有任何本地內容等待推送。

但...

在刪除我的本地存儲庫之前,我想確保所有內容都已推送到我的遙控器。 我經歷的過程通常是這三個步驟:

git st    # check if there's something I haven't committed

git stash list    # check if I've stashed something

git log --oneline --decorate --all    # check if all branches have been pushed

我想簡化一下。 尤其是最后一步,需要我查看我所有的分支,看看本地和遠程的是否同步。 可以肯定的是,我什至可能需要向下滾動一點以確保我沒有遺漏任何東西。

我正在考慮編寫一個腳本來自動完成所有這些,但也許已經有解決方案了? (我認為我不必強調我希望在命令行上完成此操作而不使用任何花哨的 GUI :D)

大家怎么看待這個問題? 檢查您沒有忘記任何事情的過程是什么? 你使用什么工具? 歡迎所有想法!

要知道本地和遠程分支是否同步,您需要比較 HEAD 修訂版的哈希值。

當您執行git branch -v -a您將收到本地和遠程分支列表以及相應 HEAD 修訂版的哈希值:

$ git branch -v -a
  develop                             44e61b5 <Commit message>
  feature/CodeContracts               c26edee <Commit message>
* feature/Foo                         3a40e22 <Commit message>
  master                              e68e28a <Commit message>
  remotes/origin/HEAD                 -> origin/master
  remotes/origin/develop              44e61b5 <Commit message>
  remotes/origin/feature/Bar          be9666c <Commit message>
  remotes/origin/master               e68e28a <Commit message>

很容易看到,develop 和 master 在本地和遠程都是最新的, feature/Bar本地不存在, feature/CodeContractsfeature/Foo遠程不存在,所以應該在刪除本地之前推送它們存儲庫。

基於 Daniel Hilgarth 的回答,我建議執行以下步驟

首先,運行git fetch --all以確保您擁有來自所有上游存儲庫的最新更改

然后運行git branch -vva - (注意雙 -v)。 這將打印所有分支 ( a ),並為每個分支打印最新提交,以及有關上游分支的信息(如果設置了上游)。

結果將如下所示:

  br1                   88006cd Branch
  br2                   0b68b6f [origin/br2] New commit
  c                     9ed6569 Dummy
* master                f4664d4 [origin/master: ahead 1] my commit
  remotes/origin/HEAD   -> origin/master
  remotes/origin/br3    9ed6569 Dummy
  remotes/origin/master 9ed6569 Dummy

您可以看到您有四個本地分支(master、c、br1、br2)。 master 和 br2 有上游分支。 br2 已完全推送,master 有一個尚未推送的本地提交(“ahead 1”)。

br1 和 c 是沒有上游信息的本地分支。 對於這些,您必須檢查並決定要做什么 - 它們可能完全合並,並且是多余的; 或者您可能想將它們推向上游; 或者您可能希望在本地合並它們,例如掌握,然后推送。 要查看未完全合並到本地 master 的git branch --no-merged master ,請使用git branch --no-merged master 在這個例子中,這將打印“br1 br2”(因為分支 c 是 master 的祖先)。

最后,您可以看到對於 br2 列出了上游分支 origin/br2,它不存在。 這意味着遠程存儲庫已刪除此分支(並且您使用“git remote prune”或“git fetch -p”獲取此刪除)。 同樣,您必須決定是要放棄本地提交,還是重新推送或合並它們。

反復刪除你的回購是一件壞事。 例如, Linux 存儲庫是 126 MB; 你可以看到它是如何快速變老的。 也許這個腳本會有所幫助。 它檢查目錄中的所有文件夾(在本例中為/opt )並為您提供每個文件夾的git status

#!/bin/sh
warn ()
{
  printf '\e[1;35m%s\e[m\n' "$*"
}
c ()
{
  printf '\ec'
}
compgen -d /opt/ | while read k
do
  c
  cd $k
  git status
  warn $k
  read </dev/tty
done

暫無
暫無

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

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