如何确保一切都被git推送?

时间:2013-02-14 10:32:44

标签: git command-line

我想从我的电脑上移除我没有处理过的回购。我检查了一些东西,我正在处理它,当我完成时,我推动所有内容并从我的计算机中删除该文件夹。这样事情保持整洁,很容易得到我实际工作的概述,我知道我没有任何本地的东西等待被推。

但是...

在删除我的本地仓库之前,我想确保所有东西都被推到我的遥控器上。我经历的过程通常是以下三个步骤:

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)

你们怎么接近这个?检查你没有忘记任何事情的过程是什么?你用什么工具?欢迎所有想法!

3 个答案:

答案 0 :(得分: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>

正如您可以轻松看到的那样,开发和掌握是最新的本地和远程,feature/Bar在本地不存在,feature/CodeContractsfeature/Foo不存在远程,所以在删除本地存储库之前应该将它们推送。

答案 1 :(得分: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是没有上游信息的本地分支。对于这些,您必须检查并决定做什么 - 它们可能完全合并,并且是多余的;或者你可能想把它们推向上游;或者你可能想在本地合并它们,例如掌握,然后推动。要查看未完全合并到本地母版的分支,请使用git branch --no-merged master。在这个例子中,这将打印“br1 br2”(因为分支c是master的祖先)。

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

答案 2 :(得分:1)

反复删除你的回购是一件坏事。例如Linux repo是126 MB;你可以看到它如何快速变老。也许 this script 有助于。它会检查目录中的所有文件夹(在本例中为/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