stay hungry stay foolish

git常用命令

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 commitidgit checkout -b branchname的组合

修改commit注释

git commit --amend

该命令可以生成一个新的提交,覆盖掉当前分支最新的一次提交,利用这个特性,可以在不提交新内容的情况下修改最后一次提交的注释(commitid 将改变),也可以提交新内容后覆盖最后一次提交。

其他

git diff --name-only <commit-1> <commit-2>

获取两次提交之间修改的文件

git diff --name-only HEAD~ HEAD

获取最近依次提交修改的文件