如何在git push之前告诉git commit的结果?

时间:2013-06-27 15:35:23

标签: git

我是git的新手。我了解一旦使用git add添加新文件,我必须运行git commit然后git push

前几天,我做了这件事并且惊讶地发现我的所有文件都没有签入,所以我想问下面这个问题:

一旦我git commit,我怎么能确定在git push之前确切地检查了什么?我可以复制一下我的项目,因为它会被推送到git吗?

6 个答案:

答案 0 :(得分:7)

如果您在git status之前运行git commit,它会告诉您哪些更改将包含在提交中,哪些不会。

运行git commit后,更改已经签入本地存储库。 Pushing不会检查它们,它只是使用您在本地存储库中提交的更新来更新另一个存储库。这与Subversion等集中式VCS不同。

在推动之前,有几种方法可以看到推动的内容:

  • git diff origin/master会显示您当前状态与origin/master之间的差异。
  • git log origin/master..master将列出要推送的提交,但不会显示其内容。

答案 1 :(得分:3)

git show

将显示上次提交提交的详细信息。

如果有多个提交,您也可以使用

git diff origin/master

假设您的遥控器名为origin,而您要推送的分支是master

答案 2 :(得分:2)

  1. git diff可以很好地处理您所做的更改。例如,您可以使用git diff origin/master(如果您要推送的远程命名为origin)来查看当前分支与远程分支之间的差异。

  2. 另一种方法是使用git show。如果您在本地进行了3次提交,则可以使用git show HEAD...HEAD~3查看最近三次提交的内容。

  3. 更复杂(但容易混淆)的方法是使用whatchanged

    git whatchanged -p --abbrev-commit --pretty=medium

    我使用git别名填充,在shell中将其分配给gwc

答案 3 :(得分:1)

我为bash脚本使用别名:

我将脚本保存在我的主目录中的~/bin/git-outgoing目录下面。我的~/bin/位于PATH;确保无论你把它放在哪里都可以访问,如果你打算别名它。

<强> git的出射

#!/bin/sh
# Usage: git-outgoing [<upstream>] [<head> [<limit>]]
# Show commits on current branch that do not exist on branch <upstream>.

# bail out with message to stderr and exit status 1
die() {
    echo "$(basename $0):" "$@" 1>&2
    exit 1
}

# colors
SHA=$(git config --get-color 'color.branch.local')
ADD=$(git config --get-color 'color.diff.new')
REM=$(git config --get-color 'color.diff.old')
RESET=$(git config --get-color '' 'reset')

# get the current branch in refs/heads/<branch> form
ref=$(git symbolic-ref -q HEAD)
test -n "$ref" ||
die "you're not on a branch"

# just the branch name please
branch=$(echo "$ref" | sed 's@^refs/heads/@@')
test -n "$branch" ||
die "you're in a weird place; get on a local branch"

# use tracking branch if no upstream given
if [ $# -eq 0 ]
then
    remote=$(git config --get "branch.$branch.remote" || true)

    merge=$(git config branch.$branch.merge) ||
    die "branch $branch isn't tracking a remote branch and no <upstream> given"

    set -- "$remote/$(echo "$merge" |sed 's@^refs/heads/@@')"
fi

git cherry -v "$@"                                |
cut -c1-9,43-                                     |
sed -e "s/^\(.\) \(.......\)/\1 $SHA\2$RESET/"    |
sed -e "s/^-/$REM-$RESET/" -e "s/^+/$ADD+$RESET/"

这个附带的入站脚本进入~/bin/git-incoming

<强> git的入射

#!/bin/sh
# Usage: git-incoming [--diff] [<upstream>] [<head> [<limit>]]
# Show commits on <upstream> that do not exist on current branch.

# bail out with message to stderr and exit status 1
die() {
    echo "$(basename $0):" "$@" 1>&2
    exit 1
}

# colors
SHA=$(git config --get-color 'color.branch.local')
ADD=$(git config --get-color 'color.diff.new')
REM=$(git config --get-color 'color.diff.old')
RESET=$(git config --get-color '' 'reset')

# check for -d / --diff argument
diff=false
if [ "$1" = '-d' -o "$1" = '--diff' ]
then diff=true
     shift
fi

# use tracking branch if no upstream given
if [ $# -eq 0 ]
then
    # get the current branch in refs/heads/<branch> form
    ref=$(git symbolic-ref -q HEAD)
    test -n "$ref" ||
    die "you're not on a branch"

    # just the branch name please
    branch=$(echo "$ref" | sed 's@^refs/heads/@@')
    test -n "$branch" ||
    die "you're in a weird place; get on a local branch"

    # grab remote name for current branch
    remote=$(git config --get "branch.$branch.remote" || true)

    # grab tracked branch name for current branch
    merge=$(git config branch.$branch.merge) ||
    die "branch $branch isn't tracking a remote branch and no <upstream> given"

    # make it so
    set -- "$remote/$(echo "$merge" |sed 's@^refs/heads/@@')"
fi

if $diff
then git diff HEAD..."$1"
else
     git cherry -v HEAD "$@"                           |
     cut -c1-9,43-                                     |
     sed -e "s/^\(.\) \(.......\)/\1 $SHA\2$RESET/"    |
     sed -e "s/^-/$REM-$RESET/" -e "s/^+/$ADD+$RESET/"
fi

在我的.gitconfig中,我为此创建了一个别名:

[alias]
out = !git-outgoing
in = !git-incoming

现在,我可以在项目根目录中git out查看要推送的内容,或git in查看将要播放的内容。

这些是我发现的比我自己更好的脚本。我找不到作者,但会在我做的时候编辑。

答案 4 :(得分:0)

您可以采用多种方式,但最简单的方法是使用git log --stat。它将显示已更改文件的摘要:

$ git log -2 --stat
commit 85318f521f6c0b9843d6da12abf67f2de7608431
Author: Junio C Hamano <gitster@pobox.com>
Date:   Wed Jun 26 15:10:17 2013 -0700

    Update draft release notes to 1.8.4

    Signed-off-by: Junio C Hamano <gitster@pobox.com>

 Documentation/RelNotes/1.8.4.txt | 12 ++++++++++++
 1 file changed, 12 insertions(+)

commit ad76feb55eb7645661421e213796129efcbb7d56
Merge: 12dd2f6 212eb96
Author: Junio C Hamano <gitster@pobox.com>
Date:   Wed Jun 26 15:08:09 2013 -0700

    Merge branch 'tr/maint-apply-non-git-patch-parsefix'

    Fix for the codepath to parse patches that add new files, generated
    by programs other than Git.  THis is an old breakage in v1.7.11 and
    will need to be merged down to the maintanance tracks.

    * tr/maint-apply-non-git-patch-parsefix:
      apply: carefully strdup a possibly-NULL name

这是git存储库中的一个示例。注意:默认情况下,合并提交不会显示任何内容。如果你想看到它们的统计数据,你需要传递--cc选项(代表“紧凑组合”):

$ git log -2 --stat --cc
commit 85318f521f6c0b9843d6da12abf67f2de7608431
Author: Junio C Hamano <gitster@pobox.com>
Date:   Wed Jun 26 15:10:17 2013 -0700

    Update draft release notes to 1.8.4

    Signed-off-by: Junio C Hamano <gitster@pobox.com>

 Documentation/RelNotes/1.8.4.txt | 12 ++++++++++++
 1 file changed, 12 insertions(+)

commit ad76feb55eb7645661421e213796129efcbb7d56
Merge: 12dd2f6 212eb96
Author: Junio C Hamano <gitster@pobox.com>
Date:   Wed Jun 26 15:08:09 2013 -0700

    Merge branch 'tr/maint-apply-non-git-patch-parsefix'

    Fix for the codepath to parse patches that add new files, generated
    by programs other than Git.  THis is an old breakage in v1.7.11 and
    will need to be merged down to the maintanance tracks.

    * tr/maint-apply-non-git-patch-parsefix:
      apply: carefully strdup a possibly-NULL name

 builtin/apply.c         |  2 +-
 t/t4111-apply-subdir.sh | 14 ++++++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)

要查看更改的实际内容,您可以使用-p上的git log选项,或直接使用git show COMMIT_ID查看提交。我更喜欢后者。 git show也接受--stat选项。

答案 5 :(得分:0)

启动gitk或任何其他可视化历史浏览器:它显示您的分支和来源,提交中的差异,并提供所有其他工具以进行事后审核。