7

我喜欢从我的计算机中删除我没有处理的存储库。我检查了一些东西,我正在处理它,当我完成后,我推送所有内容并从我的计算机中删除该文件夹。这样一来事情就保持整洁,很容易了解我实际在做什么,而且我知道我没有任何本地内容等待推送。

但...

在删除我的本地仓库之前,我想确保所有内容都已推送到我的遥控器。我经历的过程通常是这三个步骤:

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)

你们如何处理这个问题?你检查你没有忘记任何东西的过程是什么?你用什么工具?欢迎所有想法!

4

3 回答 3

5

要知道本地和远程分支是否同步,您需要比较 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

于 2013-02-14T10:48:07.130 回答
3

基于 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 有一个尚未推送的本地提交(“提前 1”)。

br1 和 c 是没有上游信息的本地分支。对于这些,您必须检查并决定要做什么——它们可能完全合并,并且是多余的;或者你可能想把它们推到上游;或者您可能想在本地合并它们,例如掌握,然后推送。要查看未完全合并到本地 master 的分支,请使用git branch --no-merged master. 在本例中,这将打印“br1 br2”(因为分支 c 是 master 的祖先)。

最后,您可以看到 br2 列出了上游分支 origin/br2,但它不存在。这意味着远程存储库已删除此分支(并且您使用“git remote prune”或“git fetch -p”获取了此删除)。同样,您必须决定是要丢弃本地提交,还是重新推送或合并它们。

于 2013-02-14T14:35:01.487 回答
0

反复删除您的存储库是一件坏事。例如,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
于 2013-02-14T10:52:58.367 回答