Git

git show 命令可以查看很多信息 分支 标签 commitId

log

git log 的节点只与当前分支相关的节点,包括创建此分支之前继承的节点 和 之后自己提交的 以及作为当前分支与其他分支合并的log

git log --graph  可以看到分支合并图
git log --graph --pretty=oneline --abbrev-commit 以图形化方式更好的展示分支合并状况

diff

git diff 工作区与缓存区比较
git diff --cache 缓存区与HEAD比较
git diff HEAD 工作区与当前分支对比
git diff branchName 当前分支与某分支对比
git diff commitId 工作区与某次提交对比

回退

git checkout -- fileName 将工作区文件撤销修改至与暂存区一致

git reset HEAD fileName 将暂存区的修改撤销掉 重新放回工作区(HEAD表示最新版本)

git reset commitId 回退版本

删除

 git rm filename 将暂存区和工作区的文件一起删除
 git rm --cache filename 将暂存区的文件删除但是保留工作区文件

分支

不同分支共享工作区和暂存区,但是版本库是不一样的 ,因此不同分支下的文件是工作区 暂存区可各自的版本库文件总和 可能文件不同

git checkout -b newBranchName 创建分支并且切换分支 相当于 git branch branchName +  git checkout branchName
git branch branchName 创建分支
git checkout branchName 切换分支为当前分支
git branch -d branchName 删除分支
git merge branchName 将其他分支合并到当前分支
git merge -m "commitInfo" branchName 合并分支 当不为快速合并时 新建commitInfo的提交
git merge --no-ff -m "commitInfo" branchName 禁用快速合并

快速合并

如果当前的分支和另一个分支没有内容上的差异,就是说当前分支的每一个提交(commit)都已经存在另一个分支里了,git 就会执行一个“快速向前”(fast forward)操作;git 不创建任何新的提交(commit),只是将当前分支指向合并进来的分支。 否则合并会新建一个提交来合并分支

stash

git stash 将工作去和缓存区文件stash起来

 git stash list 查看stash内容的列表
 
 git stash apply stash@\{0\}  恢复暂存 不删除stash内容(如果不指定节点 默认最后stash的一个)
 
 git stash drop stash@\{0\} 删除stash内容(如果不指定节点 默认最后stash的一个)
 
git stash pop stash@\{0\} 恢复暂存 并且删除stash内容(如果不指定节点 默认最后stash的一个)

remote

git remote -v 查看远程信息

git branch -r 查看远程分支信息

git checkout -b branchName origin/branchName  创建远程的branchName分支到本地


git push <远程主机名> <本地分支名>:<远程分支名> 将本地分支推送到远程分支 如果没有这个远程分支就新建远程分支

git pull <远程主机名> <远程分支名>:<本地分支名> 如果没有本地分支 就创建本地分支


git push origin branchName 将本地分支推送到远程分支 如果分支不存在 就会新建

git push origin :branchName 删除指定远程分支 等同于 git push origin --delete master

git push origin 将当前分支 推送到远程分支

git push -u origin master 使用-u选项指定一个默认主机,这样以后就可以不加任何参数使用git push

git push -f origin branchName -f表示覆盖远程分支 相当于先删除远程分支在新建

git pull origin remoteBranch  remoteBranch与当前分支合并

git branch --set-upstream-to=origin/branchName branchName 指定本地分支与远程分支的连接,建立追踪关系后 就可以直接 git pull origin 省略远程分支名字 如果只有一个追踪分支 origin也可以省略 

变基

使用rebase命令将提交到某一分支上的所有修改都移至另一分支上,就好像“重新播放”一样。

找到两个分支的共同祖先分支,然后对比当前分支相对于该祖先的历次提交,提取相应的修改并存为临时文件,然后将当前分支指向目标基底

merge合并出来的结果没什么区别 只是减少了分支使合并历史更加整洁

git rebase 分支名称

标签

标签也是版本库的快照

git tag tagName 打标签 默认打在最新提交commit
git tag tagName commitId 给commit打上标签
git tag -a tagName -m "tag说明文字" commitId 给tag加说明文字 -a为标签名 -m为说明文字
git tag 查看所有标签
git show tagName 查看标签信息(git show命令还可以查看其它很多信息)
git tag -d tagName 删除本地标签

//推送标签
git push origin refs/tags/源标签名:refs/tags/目的标签名 

git push origin tagname 推送标签到远程
git push origin --tags 推送所有标签

删除远程标签
git tag -d tagname //先删除本地标签
git push origin :refs/tags/tagname

删除未追踪文件

# 删除 untracked files
git clean -f
 
# 连 untracked 的目录也一起删掉
git clean -fd
 
# 连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
git clean -xfd
 
# 在用上述 git clean 前,墙裂建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
git clean -nxfd
git clean -nf
git clean -nfd

补充

ignore

git check-ignore -v 文件名 查看ignore文件写的有什么问题

alias

git config --global alias.st status //st代表status
git config --global alias.co checkout //co 代表 checkout
git config --global alias.ci commit //ci代表commit
git config --global alias.br branch //br代表branch
git config --global alias.last 'log -1' //git last代表 git log -l 最后一次提交信息
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" //修改git lg 为一种好看的格式

搭建自定义Git仓库

参考