- 创建git仓库命令
git init
- 创建成功后添加要进行管理的文件,执行
git add <file>
将文件进行添加,然后执行git commit -m"xxx"
进行commit。 - 使用
git status
进行查看当前管理文件的状态,若发生变化,执行git diff
可以查看文件变更的状态。 - 使用
git log
查看git的历史纪录,显示的内容是由最近提交到最远提交的。
$ git log
commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao <askxuefeng@gmail.com>
Date: Tue Aug 20 15:11:49 2013 +0800
append GPL
commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: Michael Liao <askxuefeng@gmail.com>
Date: Tue Aug 20 14:53:12 2013 +0800
add distributed
commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: Michael Liao <askxuefeng@gmail.com>
Date: Mon Aug 19 17:51:55 2013 +0800
wrote a readme file
例如执行git log后出现上面的内容,每个commit后一串字符串表示commit id
(版本号)。若感觉看起来比较复杂,可以加上--pretty=oneline
参数。
$ git log --pretty=oneline
3628164fb26d48395383f8f31179f24e0882e1e0 append GPL
ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file
在Git中,使用HEAD
表示当前版本,也就是上面commit id 3628...指定的提交,上一个版本是HEAD^,上上个版本是HEAD^^
。当然往上100个版本通过HEAD~100
- 如果要指定回退到上一个版本,那么执行
git reset --hard HEAD^
.这时候会回到add distributed的提交那里。而append GPL则丢失了,如果我想要再返回原来的状态怎么办,这时候commit id
就有用了。只需要指定:git reset --hard 3628164
就可以指定回到未来的某个版本。这里3628164
只是前几位,不必写全,只要git能够追踪到就好。这里通过reset
操作,就是操作当前HEAD
指针的移动。当你回退到某个版本,你关掉了电脑,第二天才想重回到新版本怎么办,找不到了commit id
。不用担心,Git提供了一个命令git reflog
来记录你的每一次命令。
$ git reflog
ea34578 HEAD@{0}: reset: moving to HEAD^
3628164 HEAD@{1}: commit: append GPL
ea34578 HEAD@{2}: commit: add distributed
cb926e7 HEAD@{3}: commit (initial): wrote a readme file
从上面便看到了commit id
。
- Git工作区和暂存区。工作区就是在电脑上能看到的目录。工作区有一个隐藏目录
.git
,这个不是工作区,而是Git的版本库。Git版本库中有很多东西,其中最主要的是成为stage的暂存区,还有Git自动为我们创建的第一个分支master,以及指向master的一个指针HEAD。我们把文件往Git版本库中添加的时候,分两步执行。git add
所做的操作就是把文件添加进去,实际上把文件修改添加到暂存区。git commit
提交更改,就是吧暂存区的所有内容提到当前分支。 - 撤销修改操作。当你修改文件,还没有add的时候发现修改是有问题的,可以使用
git checkout --file
丢弃在工作区的修改。这时候会有两种情况,一种是file自修改后还没有放到暂存区,现在撤销修改就回到和版本库一模一样的状态。一种是file已经添加到暂存区后,又做了修改,现在撤销修改就回到添加到暂存区后的状态。总之就是让文件回到最近一次git commit
或git add
时的状态。 - 加入已经通过
git add
进行了操作,同样可以使用git reset HEAD file
可以把暂存区的修改撤销(unstage),重新放回工作区。git reset
既可以回退版本,也可以把暂存区的修改回退到工作区。当我们使用HEAD
时,表示最新的版本。 - 删除文件。
rm file
对文件进行了删除。这时候工作区和版本库就不一致了,如果确实要从版本库中删除该文件,那么使用命令git rm
删除。并且git commit
提交。 - Git合并分支。命令
git merge <branch name>
这里合并是fast forward模式的。如果要强制禁用fast forward模式,在喝冰的时候加入参数--no-ff
.例如:git merge --no-ff -m"merge with no-ff <branch name>"
因为在不用fast forward下合并分支的时候会创建一个新的commit点,所以要加上-m
把commit描述加上去。 - stash用法。当你在当前分支修改一个业务的时候,出现了bug,这时你还不想提交当前的修改但是又不得不修复bug。于是可以使用
git stash
将当前的修改储存起来。这时候使用git status
会发现工作区是干净的。于是你可以重新切分支修改bug。当修改完毕后,再次返回到刚刚的业务分支,要把储存的工作拿出来。有两个方法可以使用:a.使用git stash apply
恢复,但是恢复后stash内容不删除,还要使用git stash drop
来删除。b.使用git stash pop
,恢复的同时也把stash内容删除了。使用git stash list
可以查看存起来的内容有哪些。你可以多次stash,恢复的时候先使用git stash list
查看,然后在恢复指定的stash,命令为:git stash apply stash@{x}
其中x表示对应的恢复点。 - 强行删除一个未被合并过的分支。
git branch -D <branch name>
。 - Git创建标签。首先切换到要打标签的分支,然后
git tag <name>
就打上标签,git tag
查看当前分支的所有标签。默认标签是打在最新提交的commit上。有时候,如果忘了打标签,比如今天突然想起来前天的标签忘记打,怎么办?方法是找到历史提交的commit id,然后打上就可以。
git log --pretty=oneline --abbrev-commit
6adfsjs merged bug fix 101
cc17934 fix bug
6223456 add merge
比如我要对add merge
打标签,对应的commit id是6223456,只需要git tag <name> 6223456
即可对该commit打上标签。
- 创建带有说明的标签。
git tag -a <tagname> -m "commit describtion" 6223456
。用命令git show <tagname>
查看详细tag信息。 - 将tag推送到远程。
git push origin <tagname>
推送一个本地标签到远程。git push origin --tags
将全部未推送过的本地标签到远程。git tag -d <tagname>
删除本地标签。git push origin :refs/tags/<tagname>
删除一个远程标签。 - 配置别名
将git status
配置git st
git config --global alias.st status
别的举例:
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch
-
git fetch
会更新remote master的索引。即该命令执行后,会将远程remote分支上的更新一起拉去下来。 -
git diff
如果要查看尚未加入暂存的文件更新了哪些部分,使用git diff
.不加参数的该命令是比较工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容。若要查看已经暂存起来的文件和上次提交时的快照之间的差异,可以用git diff --cached
命令(Git1.6.1及更高版本还允许使用git diff --staged
效果是相同的)。有时候暂存了所有更新的文件后,使用git diff
什么也没发现就是这个原因。 - ********跳过使用暂存区域。********Git提供了一个跳过使用暂存区的方式,只要在提交时候,给
git commit
加上-a
选项,Git就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过git add
步骤。 - ********取消已经暂存的文件********。我们在提交的时候,本来想要分开提交,但是一不小心使用了
git add.
全加到了暂存区。如果要撤销对应的其中某个文件,则使用git reset HEAD <filename>
来将文件撤销到之前已修改但是未暂存的状态。 - ********取消对文件的修改********。如果感觉对刚刚文件的修改完全没必要,要撤销刚刚的修改,回到之前的状态,则使用
git checkout --<filename>
来撤销对文件的修改。