git 利用好git status的提示信息
利用好git status的提示信息
git里有工作区,暂存区,本地库,远程库这些概念,在此不赘述。本地库里面你会处于某个分支branch上,具体到你会在这条branch的某个版本HEAD,这个HEAD的名字不会变,但它可以移动到它的上一个版本。
而git status
是很重要的一条命令,一般在执行git操作前都会看一下这条命令的提示(感觉可以这么说,看懂git status
的提示,那基本上你就懂git操作了)。下面开始介绍:
Changes not staged for commit
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
- 既然是Changes not staged for commit,就说明出现这个提示下的所有文件改动,都是存在于工作区的。stage是暂存区的意思,not stage说明都不在暂存区,那么说明在工作区。
- (use “git add …” to update what will be committed)。执行这条命令就可以工作区里面的改变加入到暂存区。可以执行
git add .
把当前目录下所有改动加入暂存区。 - (use “git checkout – <file>…” to discard changes in working directory)。执行这条命令将丢弃在工作区的改动。可以执行
git checkout *
把当前目录下所有工作区的改动丢弃掉。
Untracked files
Untracked files:
(use "git add <file>..." to include in what will be committed)
- Untracked files,就说明出现这个提示下的所有文件都是当前HEAD没有被加入过的文件。这种改动也属于工作区。
- (use “git add <file>…” to include in what will be committed)。把Untracked files加入暂存区。
Changes to be committed
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
- 既然是Changes to be committed,那么说明改动已经存在于暂存区,需要提交到本地库上去。执行完
git commit
以后,会把这条提示下面的所有改动作为一次commit提交到本地库上去。 - (use “git reset HEAD <file>…” to unstage)。to unstage说明了这个改动已存在于暂存区,当然也存在于工作区。这条命令清空add命令向暂存区提交的关于file文件的修改。也就是说,只清空暂存区,但不动工作区。
Unmerged paths
Unmerged paths:
(use "git reset HEAD <file>..." to unstage)
(use "git add <file>..." to mark resolution)
- 这是我运行
git pull
和git stash apply
后,冲突的文件。在文件中把冲突都保留下来了,并需要自己手动处理。 - (use “git reset HEAD <file>…” to unstage)。分析同上。改动已在暂存区。
- (use “git add <file>…” to mark resolution)。在你手动修改后,(修改后工作区更新了,但暂存区还没更新),需要add来更新暂存区。
冲突文件
冲突文件示例:
<<<<<<< Updated upstream
//来自git pull的更新
=======
//来自git stash apply的更新
>>>>>>> Stashed changes
branch信息
On branch master
Your branch is up to date with 'origin/master'.
你在当前分支master上,且你的分支和远程库origin的master分支是一致的,即本地库的HEAD和远程库的HEAD是同一个。
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
你的本地分支比远程分支领先了一次commit。
git reset的提示
Unstaged changes after reset
当前git status的提示是:本地库的版本指向的是最新的这个commit。
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
执行git reset HEAD~
后的提示为:
Unstaged changes after reset:
M first.java
D second.java
这条命令会把HEAD指向最新的commit之前的那个版本(清空掉最新的这个commit),同时会把暂存区的改变清空掉,这样,改动就只存在于工作区了。Unstaged意思就是将以前已经stage的改动给Unstaged了。