以下内容学自:Git教程
本地基础操作
-
pwd
命令可以显示当前的目录。 -
通过
git init
命令把当前的目录变成Git可以管理的仓库。 -
git add <filename>
把文件添加到仓库。 -
git commit -m <event>
-
通过
git status
命令查看当前仓库状态。 -
git differ <filename>
可以查看修改了什么内容。 -
git log
可以查看commit
的历史记录。 -
git reset --hard HEAD~n
n是倒回第几个历史版本。可以将当前版本回退到倒数第n个版本。git reset --hard <commit_id>
可以回退到指定的commit_id
的历史版本。 -
cat <filename>
可以查看filename
的内容。 -
git reflog
可以查看操作的记录。
-
git init
之后那个目录就是工作区。 -
git add
就是把修改放到stage
(暂存区)当中。 -
git commit
之后放在暂存区的修改就全部提交到分支。
git checkout -- <filename>
可以用在工作区的文件修改后还没提交到暂存区,使用这个命令可以撤销掉工作区的修改,回到和版本库一模一样的状态。git reset HEAD <filename>
可以把暂存区的修改撤销掉,重新放到工作区。git rm <filename>
可以从版本库删除文件,执行完这个还要执行commit
提交才可以删除版本库的文件。
远程仓库
-
要关联一个远程库。
使用命令
git remote add origin git@server-name:path/repo-name.git
。server-name
是github.com
,path
是Github账号。repo-name
是仓库名。 -
将本地的更新同步到远程仓库。
git push -u origin master
origin
是远程库的名称。- 把本地库的内容推送到远程,用
git push
命令,实际上是把当前分支master
推送到远程。 - 由于远程库是空的,我们第一次推送
master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令。 - 之后只要本地作了提交就可以使用
git push origin master
把本地master
分支的最新修改推送至Github。
-
将远程仓库克隆到本地。
git clone git@server-name:path/repo-name.git
会将目标克隆到当前目录。
分支管理
-
git branch <name>
创建分支。 -
git checkout <name>
切换分支。 -
git checkout -b <name>
表示创建并切换分支。 -
git branch
查看当前分支。 -
git merge <name>
合并分支。 -
git branch -d <name>
删除分支。 -
处理冲突
- 当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
- 用
git log --graph
命令可以看到分支合并图。
-
通常,合并分支时,如果可能,Git会用
Fast forward
模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward
模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
合并分支时,加上--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward
合并就看不出来曾经做过合并。 -
当手头工作没有完成时,先把工作现场
git stash
一下,保存现场。git stash apply
恢复现场git stash drop
删除stash。git stash pop
恢复现场并删除stash。git stash list
可以查看所有的stash。- 有多个stash的时候,可以使用
git stash apply <stashname>
恢复指定的stash。
-
如果要丢弃一个没有被合并过的分支,可以通过
git branch -D <name>
强行删除。 -
多人合作
- 查看远程库信息,使用
git remote -v
; - 本地新建的分支如果不推送到远程,对其他人就是不可见的;
- 从本地推送分支,使用
git push origin branch-name
,如果推送失败,先用git pull
抓取远程的新提交; - 在本地创建和远程分支对应的分支,使用
git checkout -b branch-name origin/branch-name
,本地和远程分支的名称最好一致; - 建立本地分支和远程分支的关联,使用
git branch --set-upstream branch-name origin/branch-name
; - 从远程抓取分支,使用
git pull
,如果有冲突,要先处理冲突。
- 查看远程库信息,使用
标签管理
git的tag绑定了commit,可以说是ip和域名的关系。
创建标签
- 命令
git tag <name>
用于新建一个标签,默认为HEAD
,也可以指定一个commit id; git tag -a <tagname> -m "blablabla..."
可以指定标签信息;git tag -s <tagname> -m "blablabla..."
可以用PGP签名标签;- 命令
git tag
可以查看所有标签。
操作标签
- 命令
git push origin <tagname>
可以推送一个本地标签; - 命令
git push origin --tags
可以推送全部未推送过的本地标签; - 命令
git tag -d <tagname>
可以删除一个本地标签; - 命令
git push origin :refs/tags/<tagname>
可以删除一个远程标签。