1,初始化仓库:
git init --此命令会在当前目录下新建一个Git仓库。新建了一个 .git的隐藏目录,仓库的所有数据都放在这个目录里。目前还是空的。
2,跟踪,暂存文件:
git add --执行git add 命令将源文件的修改加入git仓库的暂存区,待执行git commit时,正式将修改存入仓库。或新建一个文件后 git add 文件名 跟踪这个文件
3,提交:
git commit --git commit 用于将暂存的修改提交入仓库 git commit -a
git commit --amend --覆盖最后一次提交,将这次提交的内容和上次的提交合并,并使用新的commit message。这个命令似乎于这种情况:提交了一条commit以后,发现代码修改得不完整,另外再提交一条会显得很乱,使用这条命令可以将之前的提交取消,替换为新的提交。
4,查看日志:
git log --查看修改历史
执行结果如下:
commit 85b6d9de45e4efe8220508f845a2a3d11ca609b2
Author: YuanSuyi<[email protected]>
Date: Mon May 22 14:51:13 2017 +0800
add include
commit 5226503c985dd593ef9edb68e77981321ce7c265
Author: YuanSuyi<[email protected]>
Date: Mon May 22 14:50:18 2017 +0800
inital commit.
其中commit后面的64个字符16进制的字符串,称为commit hash, 是这条的commit的唯一标识,全球唯一。很多git命令的后面可以带个hash。比如git show <hash值> 可以显示出这条commit修改的内容。
使用git show 命令查看某条提交的修改内容
5,分支创建分支: $ git branch mybranch
切换分支: $ git checkout mybranch
创建并切换分支: $ git checkout -b mybranch
更新master主线上的东西到该分支上: $git rebase master
切换到master分支: $git checkout master
更新mybranch分支上的东西到master上: $git rebase mybranch
更新远程库到本地: $ git fetch origin
推送分支: $ git push origin master
取远程分支合并到本地: $ git merge origin/master
取远程分支并分化一个新分支: $ git checkout -b mybranch origin/master
删除远程分支: $ git push origin :master
6,fetch,pull,push
git fetch
--所有在远程仓库里的分支,都会出现在origin/这个命名空间之下。注意:origin/ 下的分支,实际上也是存在本地的.git目录中的,就算断网也是可以查看和使用的。
--抓取远程服务器上的分支的更新数据,并同步到origin/ 下,但不会修改本地分支的内容。比如服务器上的master分支在上一次clone之后发生了变化,git fetch命令可以用于抓取这部分变化的内容,同步在origin/master分支上。
git pull
--这个命令是git fetch 和git merge 的结合。先git fetch,然后将本地分支所关联的远程分支做merge。假设当前分支是master, 相当于执行: git merge origin/master
git push
--git push 命令将本地分支的修改推送到远程服务器上。如果远程服务器上没有同名的分支,则会在远程服务器上创建新的分支,并将本地分支与远程分支做关联。
eg:
git push -u origin local_branch_name --推送分支到远程服务器
git push -u origin :remote_branch_name --删除在远程服务器的分支
7,重置:
git reset --hard --撤消一切本地的修改,将本地目录恢复为最后一次提交时的状态。包括被修改的文件,删除的文件都会被恢复原样。我们称之为hard reset。
git reset <hash值> --以上命令是soft reset,将git仓库的状态复原为commit hash指定的状态,但不对本地目录里的文件做任何操作。这个命令在某些情况下很有用:比如在代码调试阶段,连续提交了多条commit,假设修改之前的commit编号为0,后续有1..N条commit,等功能调试OK以后,发现这1..N条的很多修改都是反复的,一会儿加了点代码,一会儿又把增加的代码删除了,实际最终为了这一个功能所做的修改很有限。为了使commit log 的简洁,可以git reset commit_0_hash, 然后重新commit一条记录。