目录

1 Git commit常见用法

1.1 git commit -m “message”

1.2 git commit -a -m “massage”

1.3 git commit --amend

1.4 git commit --help

2 git commit -m 和 git commit -am的区别


git教程:https://www.yiibai.com/git

目录

1 Git commit常见用法

1.1 git commit -m “message”

1.2 git commit -a -m “massage”

1.3 git commit --amend

1.4 git commit --help

2 git commit -m 和 git commit -am的区别


Git commit常见用法

       git commit 主要是将暂存区里的改动给提交到本地的版本库。每次使用git commit 命令我们都会在本地版本库生成一个40位的哈希值,这个哈希值也叫commit-id,

  commit-id在版本回退的时候是非常有用的,它相当于一个快照,可以在未来的任何时候通过与git reset的组合命令回到这里。

1.1 git commit -m “message”

           这种是比较常见的用法,-m 参数表示可以直接输入后面的 “message” ,如果不加  -m 参数,那么是不能直接输入message的,而是会调用一个编辑器一般是 vim 来让你输入这个message

   message 即是我们用来简要说明这次提交的语句。还有另外一种方法,当我们想要提交的message很长或者我们想描述的更清楚更简洁明了一点,我们可以使用这样的格式,如下:

        git commit -m ‘

        message1

        message2

        message3

        ’

1.2 git commit -a -m “massage”

            其他功能如 -m 参数,加的 -a 参数可以将所有已跟踪文件中的执行修改或删除操作的文件都提交到本地仓库,即使它们没有经过 git add 添加到暂存区。注意,新加的文件(即没有被git系统管理的文件)是不能被提交到本地仓库的。建议一般不要使用 -a 参数,正常的提交还是使用git add先将要改动的文件添加到暂存区,再用 git commit  提交到本地版本库。

1.3 git commit --amend

            如果我们不小心提交了一版我们不满意的代码,并且给它推送到服务器了,在代码没被merge之前我们希望再修改一版满意的,而如果我们不想在服务器上abondon,那么我们怎么做呢?

         git commit --amend

        //也叫追加提交,它可以在不增加一个新的 commit-id 情况下将新修改的代码追加到前一次的 commit-id 中,

       (1) 假如现在版本库里最近的一版正是我们想要追加进去的那版,此时是最简单的,直接修改工作区代码,然后 git add,之后就可以直接进行git push到服务器,中间不需要进行其他的操作如 git pull

       (2) 如果现在版本库里最近的一版不是我们想要追加进去的那版,那么此时我们需要将版本库里的版本回退到我们想要追加的那一版,想要将版本回退到我们想要的哪一版有好几种方法。

            1) 第一种即是我们从服务器上选取我们需要的版本,直接进行挑拣,在服务器的提交管理页面上右上方一般会有一个Download按钮,点击会弹出一个下拉框,选择其中的cherry-pick,复制命令,

     之后在我们版本仓库对应的目录下运行这个命令,执行完后,使用git log -1 命令,可以查看到现在版本库里最近的一版变成了我们刚才挑拣的这版,此时再在工作区直接修改代码,

     改完之后进行git add,再执行本git commit --amend命令,之后git push。

            2) 使用gitk或其他的图形界面化工具,在终端输入 gitk,回车,会弹出 gitk 的图形界面,在界面的左侧部分陈列着版本库中的一条条commit-id,此时选中我们需要的那一版,右键点击之后会弹出一个选择菜单,如果是在 master  分支上,那么其中会有一项是 Reset master branch to here,点击这项,会弹出一个名为confirm reset的确认box,选择reset type 中的hard项,再点击OK,关闭gitk图形界面,回到终端,运行git log -1命令,发现现在版本库里最近的一次提交已经是我们希望的那一版了,此时再在工作区直接修改代码,改完之后进行git add,再执行本git commit --amend命令,之后git push.

            3) 如果我们知道我们需要的版本与现在最近的版本中间隔着 n 个提交,那么我们可以直接使用git reset --hard HEAD~n 命令,关于git reset 命令有详解,此时这个命令执行完后,运行git log -1 命令我们会发现现在版本库里最近的一版就是我们需要的那版,此时再在工作区直接修改代码,改完之后进行 git add ,再执行本 git commit --amend 命令,之后 git push.

            4) 如果我们不知道我们需要的版本与现在最近的版本中间隔着 n 个提交,那么我们可以使用git log来查看版本库中的commit-id,找到我们需要的commit-id后,在终端中执行git reset --hard commit-id,这个命令执行完后,运行git log -1 命令我们会发现现在版本库里最近的一版就是我们需要的那版,此时再在工作区直接修改代码,改完之后进行git add,再执行本git commit --amend命令,之后git push.

1.4 git commit --help

       查看帮助,还有许多参数有其他效果,一般来说了解上述三种即可满足我们工作中的日常开发了

2 git commit -m 和 git commit -am的区别

       字面解释的话,git commit -m用于提交暂存区的文件;git commit -am用于提交跟踪过的文件

       要理解它们的区别,首先要明白git的文件状态变化周期,如下图所示

        工作目录下面的所有文件都不外乎这两种状态:已跟踪未跟踪。已跟踪的文件是指本来就被纳入版本控制管理的文件,在上次快照中有它们的记录,工作一段时间后,它们的状态可能是未更新,已修改或者已放入暂存区。

下面以一个实例说明:

在项目文件夹中新增一个文件如'a.txt'时,该文件处于untracked未跟踪状态。未跟踪状态的文件是无法提交的

接下来,使用git add a.txt,使其变成已跟踪状态

这时,如果使用git commit -m 'add a.txt'就可以顺利提交了

 

但是,git commit -m 和 git commit -am的区别在哪里?在于a.txt文件修改之后的处理

下面,向a.txt添加内容'a'

       文件a.txt处于已跟踪,但未暂存状态。这时,如果使用git commit -m是无法提交最新版本的a.txt的提交的只是最开始空内容的旧版本a.txt

       要提交新版本a.txt,即内容为'a'的a.txt,则需要使用git add a.txt将新版本的a.txt放到staged暂存区,然后才能使用git commit -m进行提交

        而如果使用git commit -am,则可以省略git add a.txt这一步,因为git commit -am可以提交跟踪过的文件,而a.txt一开始已经被跟踪过了

      总结,使用这两个命令区别的关键就是git add命令

       git add命令是个多功能命令,根据目标文件的状态不同,此命令的效果也不同:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等

        我们需要用git add命令来跟踪新文件,但如果使用git commit -am可以省略使用git add命令将已跟踪文件放到暂存区的功能

git commit -am "str"
#等同于
git commit -a -m "str"

我们运行下

man git commit

来获取a参数的意义即知区别了。

OPTIONS
-a, --all
Tell the command to automatically stage files that have been modified and >deleted, but new files you have not told Git about are not affected.

意思是说

自动把当前所有修改和删除文件放到栈上,但你没有添加到git中的新文件不会受影响。

拓展:

通常我们提交git的时候都是

git add .
git commit -m "some str"
git push

这三大步,而实际上,你只需要两条命令就够了,除非有新的文件要被添加进去。

git commit -am "some str"
git push

 

 

参考:https://www.git-scm.com/docs/git-commit

 

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐