git是一个分布式的版本管理系统,没有服务端和客户端的概率,不过在团队协作中,通常会选一台客户端作为服务器,方便成员之间的push与pull
git 的结构
git分为工作区,暂存区,版本库:
工作区有一个隐藏目录.Git,这个不算工作区,而是 git 的版本库。其中有一个index
的文件,其记录了暂存区的索引。
注意:所有被跟踪的文件在暂存区都有相应的索引,当index
中没有要提交的索引时,其和当前分支的历史记录所有得索引是一致的。分支只能操作被暂存区跟踪(track)了的文件。
撤销操作
git checkout -- [dir|file]
git checkout 后面跟– 可以将暂存区内的内容恢复到工作区,从而撤销工作区的修改
git chekout commitid -- [dir|file]
也可以将某个提交恢复到工作区和暂存区,从而撤销工作区的修改,并且add到暂存区
git reset commitid -- [dir|file]
将某个提交恢复到暂存区,工作区不变:
git revert commitid
git revert
可以撤销某个提交的操作,并且生成一个新的commit
:
红色部分为当前分支最新的内容,蓝色部分为需要撤销的那个commit之前的内容
注意:需要revert
的那个commitid
之后如果对同一个文件有过修改才会产生冲突
回退操作
回滚远程仓库
git push --force origin master
reset 到某个版本后,可以使用该命令强制推送到远程仓库,回滚远程仓库代码
git reset --hard origin/master
同步远程代码到本地仓库
分支切换操作
git branch branchname
在当前最新提交下新建分支,不会切换到新分支
git branch -d|-D branchname
-d删除已经merge过的分支,-D强制可以删除未merge的分支
git checkout commitid
commitid
指向的是一个提交,该命令可以将工作区和暂存区切换到某一个具体提交或者某一个分支,当切换到某一个具体提交时,将进入datached HEAD
状态,此时可以在该提交下新建新的分支:
git checkout -b branchname
在当前最新提交下新建分支,并切换到新分支
git checkout -b branchname commitid
该命令相当于git checkout commitid
和git checkout -b branchname
的组合
修改commit注释
git commit --amend
该命令可以生成一个新的提交,覆盖掉当前分支最新的一次提交,利用这个特性,可以在不提交新内容的情况下修改最后一次提交的注释(commitid 将改变),也可以提交新内容后覆盖最后一次提交。
其他
git diff --name-only <commit-1> <commit-2>
获取两次提交之间修改的文件
git diff --name-only HEAD~ HEAD
获取最近依次提交修改的文件