常用git命令
git remote - 管理远程分支
#只显示远程仓库名 git remote #使用-v 选项,可以看到远程仓库的网址 git remote -v #添加主机名,可以查看远程仓库详细信息 git remote show origin #用于添加远程仓库 git remote add <仓库名> <网址> #修改仓库名 git remote rename <原仓库名> <新仓库名> #删除仓库 git remote rm <主机名>
示例
git pull/fetch - 拉取远程仓库最新改动
#取回远程仓库的所有更新 git fetch <远程仓库> #取回指定仓库的指定分支 git fetch <远程仓库> <分支名> #拉取本分支最新内容,和fetch区别是拉取并自动合并,建议使用 git pull
git branch - 分支操作
#以当前分支为根基,创建新的分支,不会切换到新的分支 git branch <新分支> #以当前分支为根基,创建新分支并切换到新分支 git checkout -b <新分支> #查看远程分支 git branch -r #查看所有分支 * 代表当前所在分支 git branch -a #如果删除分支没有合并到当前分支,删除会失败 #可以用git branch --merged和git branch --no-merged查看 git branch -d <分支名> #强制删除 git branch -D <分支名> #删除远程分支 git push origin --delete <分支>
合并
合并有两个命令可以使用,分别是git merge和git rebase
git merge - 合并
#把分支合并到当前分支 git merge <被合并的分支> #合并冲突解决 git add <冲突的文件>
git rebase - 变基
#把当前分支的根基变为新根基 git rebase <新基> #冲突 git rebase --continue #取出 client 分支,找出处于 client 分支和 server 分支的共同祖先之后的修改,然 后把它们在 master 分支上重演一遍 git rebase --onto master server client
示例
比较
这两个命令都是把分支合并到当前分支,只不过一个是合并,一个是首先变基再合并,变基使的提交历史更加整洁。但是一般推荐使用git merge即可,防止带来不必要的麻烦。
git merge
是三方合并,如下例C2、C3、C4合并
git rebase是变换根基,就是把C2->C4的变更,在C3在应用一次,把C4的根基变为C3,然后移动Master指针即可,所以更快,但是不要对在你的仓库外有副本的分支执行变基。
git diff - 查看变更
# 工作区和暂存区的差异 git diff <文件名> #暂存区和本地仓库的差异 git diff --cached <文件名> #工作区和本地仓库的差异 git diff <commit> <文件名> #比较任意两次提交的差异 git diff <commit> <commit>
示例
# 比较a.txt本地仓库和工作目录的差异 git diff HEAD a.txt # 比较HEAD和HEAD~2的提交差异 git diff HEAD HEAD~2
git log - 查看提交历史
# -p,用来显示每次提交的内容差异 # 加上 -2 ,只显示最近的两次提交 git log -p -2 #选项在每次提交的下面列出额所有被修改过的文件、有多少文件被修改了以及被修改 过的文件的哪些行被移除或是添加了 git log --stat #自定义输出格式 git log --pretty=format git log --pretty=format:"%h - %an, %ar : %s" #输出的SHA-1值缩写,并在一行输出 git log --abbrev-commit --oneline #根据提交者名字查找 git log --author=huan.liu10 #根据日期过滤 git log --after="2014-7-1" --before="2014-7-4" #根据提交信息过滤 git log --grep=删除 #根据文件过滤,只显示针对某个文件改动的记录 git log -- a.txt b.txt #根据内容搜索,查看某个内容的变动记录 git log -Saaaaaaaaaaa --oneline
引用日志,可以查看所有提交历史,包括删除的,可以用来恢复
git reflog
git show - 查看提交详细内容
# 显示HEAD的提交日志 git show HEAD # 显示HEAD上一个版本提交的日志 git show HEAD^
git commit - 提交
#合并上一次提交或者重新编辑上一次提交,只有一次提交记录 git commit --amend
git reset - 恢复/撤销
#撤销commit,从本地仓库到暂存区,不会丢失数据 git reset --soft <commit> #撤销暂存区,从暂存区到工作目录,不会丢失数据 git reset <文件名> #撤销commit,从本地仓库到工作目录,会丢失数据,如果想恢复丢失commit,使用git reflog git reset --hard <commit>
git checkout - 切换分支/撤销修改
#切换分支 git checkout <branch> #使用本地仓库的文件内容覆盖工作目录内容,也就是撤销对文件修改 git checkout -- <文件名>
git stash - 暂存
当不得不切到另外一个分支,但是又不想提交时使用
# 暂存工作目录和暂存区 git stash #查看暂存列表 git stash list #不会删除暂存记录 git stash apply --index #会删除暂存记录 git stash pop --index