Git配置
git config --global user.name "zz"
git config --global user.email "zz@xx.com"
git config --global color.ui true
git config --global color.status auto
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.br branch
git config --global core.editor "vim" # 设置Editor使用textmate
git config -l # 列举所有配置
用户的git配置文件~/.gitconfig
修改git 版本库地址 直接修改~/.gitconfig的地址
Git常用命令
查看、添加、提交、删除、找回,重置修改文件
git help <command> # 显示command的help
git show # 显示某次提交的内容
git show $id
git co -- <file> # 抛弃工作区中某文件的修改
git co . # 抛弃工作区修改
git add <file> # 将工作文件修改提交到本地暂存区
git add . # 将所有修改过的工作文件提交暂存区
git rm <file> # 从版本库中删除文件
git reset <file> # 从暂存区恢复修改的文件
git reset -- . # 从暂存区恢复所有修改的文件
git reset --hard <commit> # 不带commit恢复最近一次提交过的状态,即放弃某次提交后的所有本次修改,带commit以此为基准状态
git reset --hard HEAD^ #
删除最近的提交
git rebase -i HEAD~6 #
通过交互式方式,修改分支最近6次的提交数据
git ci <file>
git ci .
git ci -a # 将git add, git rm和git ci等操作都合并在一起做
git ci -am "some comments"
git ci --amend # 修改最后一次提交记录, 建本次提交和上次提交合并, 在git rebase -i中使用edit参数也会导致这个操作,意义是修改上次提交的信息git ci -C <commit> # 重用上次提交的说明和作者
git revert <$id> # 恢复某次提交的状态,恢复动作本身也创建了一次提交
git revert HEAD # 恢复最后一次提交的状态
查看文件diff
git diff <file> # 比较当前文件和暂存区文件差异
git diff
git diff <$id1> <$id2> # 比较两次提交之间的差异
git diff <branch1>..<branch2> # 在两个分支之间比较
git diff --staged # 比较暂存区和版本库差异
git diff --cached # 比较暂存区和版本库差异
git diff --stat # 仅仅比较统计信息
查看提交记录
git log
git log <file> # 查看该文件每次提交记录
git log -p <file> # 查看每次详细修改内容的diff
git log -p -2 # 查看最近两次详细修改内容的diff
git log --stat # 查看提交统计信息
Git 本地分支管理
查看、切换、创建和删除分支
git br -r # 查看远程分支
git br <new_branch> # 创建新的分支
git br -v # 查看各个分支最后提交信息
git br --merged # 查看已经被合并到当前分支的分支
git br --no-merged # 查看尚未被合并到当前分支的分支
git co <branch> # 切换到某个分支
git co -b <new_branch> # 创建新的分支,并且切换过去
git co -b <new_branch> <branch> # 基于branch创建新的new_branch
git co $id # 把某次历史提交记录checkout出来,但无分支信息,切换到其他分支会自动删除
git co $id -b <new_branch> # 把某次历史提交记录checkout出来,创建成一个分支
git br -d <branch> # 删除某个分支branch
git br -D <branch> # 强制删除某个分支 (未被合并的分支被删除的时候需要强制)
分支合并和rebase
git merge <branch> # 将branch分支合并到当前分支
git merge --squash <branch> 将分支branch合并到当前分支,将所有提交压缩产生一次提交内容
git rebase master <branch> # 将master分支 rebase到branch,相当于:
git co <branch> && git rebase master && git co master && git merge <branch>完成后要推到remote,要执行git push -f, 其他人要执行git pull --rebase
Git暂存管理
git stash #
暂存内容
git stash list
# 列所有stash
git stash apply
# 恢复暂存的内容
git stash pop # 弹出栈顶的暂存内容
Git远程分支管理
git pull --rebase # 抓取远程仓库所有分支更新并合并到本地,使用rebase方式
git fetch origin # 抓取远程仓库更新
git merge origin/
<remote_branch> # 将远程分支合并到本地当前分支
git co -b <local_branch> origin/<remote_branch> # 基于远程分支创建本地分支,功能同上
git push # push所在分支
git push origin <local_branch> # 创建远程分支, origin是远程仓库名, 通过本地分支创建远程分支
git push origin :<remote_branch> #先使用命令删除本地分支(git br -d <branch>),然后再push删除远程分支,删除分支后需要其他人使用git remote prune origin 才可见
Git场景化
1.创建一个新的分支T505,并且push到远程分支:
no branch: git clone url
# 拉去master分支从git仓库里
master: git co develop
# 切换到develop分支
develop: git pull --rebase
# 抓取远程仓库所有分支更新并合并到本地,使用rebase方式
T505: git checkout -b T505
# 创建并且切换到 T505 分支
T505: git push origin T505
# 将创建的分支push到远程
2.手动合并T505到develop分支:
develop: git pull --rebase
#抓取远程仓库所有分支更新并合并到本地,使用rebase方式(需要注意)
develop: git pull --rebase origin T505
#合并T505到develop
develop: git push
#发送到develop远程分支
基本操作
- 检出
git clone <url>
- 添加到暂存区
git add <filename> #-i交互式添加
git add *
- 仓库
git commit -m "messages"
- 推送更改 推送前pull先更新代码
git push <origin> <branch> #已clone到本地 新建第一次推送需指定仓库名&分支名
git remote add origin <server> #未clone
- 查看代码改动diff 指定比较对象 路径支持通配符
git diff # 查看工作区与暂存区的文件差异
git diff --cached # 查看暂存区与最后一次本地提交的文件差异
git diff HEAD # 工作区与最后一次本地提交之间的差异
git diff origin # 工作区与本地仓库原始版本比较
git diff --cached origin #本地提交代码和远程比较 git remote -v 查看远程branch名
- 分支
git checkout -b feature_x #创建分支x,切换过去
git checkout master #切换到主分支
git checkout -b feature_x master # 从master分支创建feature_x分支,并切换到feature_x分支
git branch -d feature #删除分支 -D强制删除
git push origin <branch> #推送到相应分支
git push origin :abc # 将远程分支abc删除
git branch -a #查看目录下的所有分支
- 合并
git merge <branch> #合并到当前分支 以branch为准 -s将提交压缩为一次
合并冲突后 git add <filename>
合并改动前 git diff <source_branch> <target_branch> #预览差异
- 暂存本地代码
从线上拉取代码提示失败,告诉你有些文件会被merge,但是你不想提交再merge,这时候就可以用stash存储更改git stash
: 将改动存起来, 恢复当前代码到初始状态。git stash apply
: 重新提出暂存的代码。stash
命令可以很好的解决这样的问题。当你不想提交当前完成了一半的代码,但是却不得不修改一个紧急Bug,那么使用git stash
就可以将你当前未提交到本地(和服务器)的代码推入到Git的栈中,这时候你的工作区间和上一次提交的内容是完全一样的,所以你可以放心的修 Bug,等到修完Bug,提交到服务器上后,再使用git stash apply
将以前一半的工作应用回来。
当你多次使用git stash
命令后,你的栈里将充满了未提交的代码,这时候你会对将哪个版本应用回来有些困惑.git stash list
命令可以将当前的Git栈信息打印出来,你只需要将找到对应的版本号git stash apply stashxxx
就可以将你指定版本号为stashxxx的工作取出来
当你将所有的栈都应用回来的时候,可以使用git stash clear
来将栈清空
移除储藏:git stash drop stash@xx
(xx表示在储藏list中的位置) - 标签
git tag 1.0.0 4g7h8j9
#创建tag 使用提交id前几位即可
Git 中的tag指向一次commit的id,通常用来给开发分支做一个标记,如标记一个版本号。
只是一个指针,指向commit id和分支有点不同。试试git checkout [tag name]
能够看出区别git tag
显示当前所有tag -
丢弃本地所有改动提交 从服务器获取历史版本 并将本地分支指向它
git fetch origin
git reset --hard origin/master #回退提交
git log -10 #找出最近的提交
git reset --hard 634a7056...eb8b5379 # 634a7056...eb8b5379 #是commit版本的hash,此操作请三思而后行(貌似可以用git reflog恢复,但没试过)
git pull # 从线上拉取最新版本
reset的一些选项参数:
根据—soft —mixed —hard,会对working tree和index和HEAD进行重置:- git reset —mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息
- git reset —soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
- git reset —hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容
-
log
git log # 查看默认格式的提交记录
git log -5 # 查看最近5条提交记录
git log -p # 查看提交记录并显示代码改动内容
git log -p --author=abc # 查看abc的提交记录并显示代码改动内容
git log --since=2011-05-24 --until=2011-05-25 # 查看从2011-05-24到2011-05-25的提交
git log --name-only # 只显示文件名
git log --pretty=oneline # 只显示一行
git log --pretty=format:%h:%s # 自定义格式
git log --graph # 图形化查看
git log --stat # 查看修改文件统计
- 对当前修改的恢复操作
未提交的修改:checkout xxx.php : 用版本库中的覆盖你本地的和index.
checkout HEAD xxx.php : 用最你最近的commit覆盖本地和index
checkout <commit> xxx.php:用某次commit覆盖本地和index
checkout -f : == reset --HARD : 撤销所有未提交的修改,用最新的commit覆盖所有改变。
checkout 什么都不加, 不产生改变。
重新修改,commit
revert HEAD. 舍去你最近的commit.- git revert HEAD 撤销前一次 commit
- git revert HEAD^ 撤销前前一次 commit
- git revert commit
reset -hard: 撤销当前所有改动,不记录log. 默认撤回到HEAD,即最近的一次提交. - git reset —hard HEAD~3 会将最新的3次提交全部重置,就像没有提交过一样。
- git reset —hard commit (38679ed709fd0a3767b79b93d0fba5bb8dd235f8) 回退到 38679ed709fd0a3767b79b93d0fba5bb8dd235f8 版本
- 的版本号不定要写全, 写出开头一些能区分的字母就行.
- 文件操作
checkout xxx.java : 用版本库中的覆盖你本地的和index.
checkout HEAD xxx.java : 用最你最近的commit覆盖本地和index
checkout <commit> xxx.java:用某次commit覆盖本地和index
checkout -f : == reset --HARD : 撤销所有未提交的修改,用最新的commit覆盖所有改变。
checkout 什么都不加, 不产生改变。
git rm file # 删除文件
git mv file1 file2 # 移动或者重命名文件