基础知识
Git有三种状态:已修改(modified)、已暂存(staged)和已提交(committed)

基础命令
准备工作
|
| $ git init <project-name> |
| 初始化一个本地资源库 |
| $ git clone <url> |
| 下载工程,包括它完整的版本记录 |
| $ git status |
| 查看当前仓库的状态 |
| $ git add <file> |
| 开始跟踪一个文件,使用文件或目录的路径作为参数;如果参数是目录的路径,该命令将递归地跟踪该目录下的所有文件。可以用.添加所有文件 |
| $ git log |
| 显示从最近到最远的提交日志 |
git commit
|
| $ git commit -m “[descriptive message]” |
| 提交暂存区中的文件到资源库 |
| $ git commit -a -m “message” |
| 跳过使用暂存区域直接提交 |
| $ git commit -m ‘ |
| 注释可以通过单引号来换行,以’开始,并以’结束 |
| $ git commit --amend |
| 合并缓存的修改和上一次的提交,用新的快照替换上一个提交。缓存区没有文件时运行这个命令可以用来编辑上次提交的提交信息,而不会更改快照。 |
| $ git commit --amend --author “NewAuthor <NewAuthor@address.com>“ 或 $ git commit --amend --reset-author |
| 修改最近一次提交的用户名和邮箱 |
git rm
|
| $ git rm <file> |
| 删除文件 |
| $ git rm --cached <file> |
| 停止跟踪文件但不删除 |
git reset
HEAD 在Git中,它是一个指针,指向当前所在的本地分支(可以将 HEAD 想象为当前分支的别名)
在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
|
| $ git reset HEAD <file> |
| 可以把暂存区的修改撤销掉(unstage),重新放回工作区,文件内容不会有变化 |
| $ git reset HEAD . |
| 可以删除暂存区中的所有文件,重新放回工作区 |
| $ git reset HEAD |
| 若不像上面那样指定某个文件的话,是直接将暂存区的所有文件重新放回工作区 |
| $ git reset <commit> |
| 撤销<commit>之后的所有提交,保留本地更改 |
| $ git reset --hard <commit> |
| 丢弃所有历史更改(包括工作区和暂存区),然后回退到指定的commit,如git reset --hard HEAD^ 回退到上一版本 |
git checkout
|
| $ git checkout -- <file> |
| 可以丢弃工作区的修改,命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令 |
| $ git checkout . |
| 会用版本库全部文件替换工作区的文件(丢弃工作区中的所有文件修改) |
| $ git checkout <name> |
| 切换分支 |
| $ git checkout -b <name> |
| 创建+切换分支 |
分支管理
git branch
|
| $ git branch |
| 会列出本地所有分支,当前分支前面会标一个*号 |
| $ git branch -a |
| 会列出本地和远程追踪分支 |
| $ git branch <name> |
| 创建分支 |
| $ git branch -d <name> |
| 删除分支 |
| $ git branch -D <name> |
| 强行删除,如丢弃一个没有被合并过的分支 |
git merge
|
| $ git merge <branch-name> |
| 合并某分支到当前分支 |
| $ git merge --abort |
| 取消合并操作,如合并时遇到冲突想取消操作 |
git rebase
|
| $ git rebase |
| 变基,将提交到某一分支上的所有修改都移至另一分支上 |
| $ git rebase --continue |
| 若上一步有冲突不能自动合并时,待冲突解决后,执行该命令 |
| $ git rebase --skip |
| 跳过这次提交 |
| $ git rebase --abort |
| 中止 |
远程操作
git remote
|
| $ git remote |
| 查看远程库的信息 |
| $ git remote -v |
| 显示更详细的信息 |
| $ git remote show <remote-name> |
| 查看某一个远程仓库的更多信息 |
| $ git remote add <name> <remote-url> |
| 关联一个远程库,如git remote add origin git@server-name:path/repo-name.git |
git fetch
|
| $ git fetch <remote-name> |
| 默认取回所有分支,没有remote指定时默认使用origin,除非已为当前分支配置了上游分支 |
| $ git fetch <remote-name> <branch-name> |
| 取回特定分支的更新,如取回origin主机的master分支,git fetch origin master |
| $ git fetch --all |
| 获取所有远程 |
| $ git fetch origin --prune |
| 清除远程已经删掉,但本地还存在的僵尸分支 |
注意:所取回的更新,在本地主机上要用”远程主机名/分支名“的形式读取。比如origin主机的master,就要用origin/master读取
git pull
git pull = git fetch + git merge
|
| $ git pull |
| 从远程抓取分支,默认也是拉取所有分支 |
| $ git pull --all |
| 拉取所有远程分支并尝试合并,但只会尝试合并当前所在分支的更改 |
| $ git pull <远程主机名> <远程分支名>:<本地分支名> |
如取回origin主机的next分支,与本地的master分支合并,需要写成git pull origin next:master。 如果远程分支是与当前分支合并,则冒号后面的部分可以省略:git pull origin next |
git push
|
| $ git push <remote-name> <branch-name> |
| 从本地推送分支,如git push origin serverfix |
| $ git push <remote-name> --delete <branch-name> |
| 删除远程分支,如git push origin --delete serverfix |
| $ git push origin <tagname> |
| 可以推送一个本地标签 |
| $ git push origin --tags |
| 可以推送全部未推送过的本地标签 |
| $ git push origin :refs/tags/<tagname> |
| 可以删除一个远程标签 |
git tag
|
| $ git tag |
| 查看所有标签 |
| $ git tag <name> |
| 打一个新标签 ,默认为HEAD,也可以指定一个commit id |
| $ git tag -a <tagname> -m “blablabla…” |
| 可以指定标签信息 |
| $ git tag -d <tagname> |
| 可以删除一个本地标签 |
| $ git show <tagname> |
| 查看标签信息 |
远程分支关联
|
| $ git checkout -b <branch-name> <remote-name>/<branch-name> |
| 在本地创建和远程分支对应的分支,本地和远程分支的名称最好一致。如git checkout -b serverfix origin/serverfix。由于该命令比较常用,提供了快捷方式:git checkout --track origin/serverfix |
| $ git branch --set-upstream <branch-name> origin/branch-name |
| 建立本地分支和远程分支的关联【不推荐使用--set-upstream,改用--track或--set-upstream-to 】 |
| $ git branch --set-upstream-to=origin/branch-name |
| 建立本地分支和远程分支的关联,本地分支默认是当前分支,名字可以与远程分支不一样 |
其他常用命令
git stash
|
| $ git stash |
| 可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作 |
| $ git stash list |
| 查看已经保存的工作现场 |
| $ git stash apply |
| 恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除 |
| $ git stash pop |
| 恢复的同时把stash内容也删了 |
| $ git stash show -p stash@{0} |
| 查看第一个最近stash的变化 |
| $ git stash drop stash@{0} |
| 删除第一个暂存内容 |
| $ git stash clear |
| 删除所有暂存 |
非常用命令
|
| $ git reflog |
| 查看命令历史 |
| $ git log --graph --pretty=oneline --abbrev-commit |
| 可以看到分支的合并情况 |
| $ git log --graph |
| 命令可以看到分支合并图 |
| $ git config --list |
| 命令来列出所有 Git 当时能找到的配置 |
| $ git checkout -b <branch-name> <tag-name> |
| 在特定的标签上创建一个新分支 |