基本配置
- 配置用户名和邮箱
$ git config user.name manager
$ git config user.email manager@gmail.com
以上两个命令会将用户信息保存在当前代码仓库中
- 如果要配置全局的用户名和邮箱
$ git config --global user.name manager
$ git config --global user.email manager@gmail.com
以上两个命令会将用户信息保存在用户目录下的 .gitconfig 文件中
- 查看当前所有配置
$ git config -l
- 配置带颜色的log别名
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"
常用命令
- Log打印
git log --oneline --graph // 显示主分支和自分支git日志
git log // 查看git的日志信息
- 查询所有提交点
git reflog #回退后需要反悔的话,需要通过此命令查找到所有操作的提交点
- 查看本地添加了哪些远程分支地址
git remote -v
- 本地git仓库添加远程地址
git remote add origin https://xxxxxxxxxxxx.git
- 创建本地分支
git branch develop
- 从develop衍生出一个新分支
git checkout -b some-feature develop
- 推送本地develop分支到远程
git push -u origin develop
- 查看本地分支
git branch
- 查看本地分支和远程分支
git branch -a
- 切换分支
git checkout master// master是要切换的分支名
- 删除本地分支
git branch -d develop// develop为要删除的分支名
- 删除远程分支
git push origin --delete develop // 一般操作是先删除本地的分支,再删除远程的分支
- 添加所有修改的文件到暂缓区
git add .
- 查看所有文件状态
git status
- 查看某一个文件状态
git status [filename]
- 添加某一个文件到暂缓区
git add [file1] [file2] ... // 可以有多个
- 提价代码到本地Git仓库
git commit -m "本次提交注释" // 需要先add . 才能提交
- 修改注释
git commit --amend
- 推送本地仓库代码到远程
git push // 提交之后可以直接push
- 指定分支推送
git push origin HEAD:refs/for/branch // branch 为指定的分支
- 更新远程代码
git pull
- fetch是将远程主机的最新内容拉到本地,不进行合并
git fetch origin master
- pull 则是将远程主机的master分支最新内容拉下来后与当前本地分支直接合并 fetch+merge
git pull origin master
- 如果远程分支是与当前分支合并,则冒号后面的部分可以省略
git pull origin master:develop #git pull <远程主机名> <远程分支名>:<本地分支名>
- 比较本地分支与git 主分支差异情况
git diff --stat develop origin/master
- 在没有push之前,把项目恢复到最近一次commit或add的状态
git checkout -- . // 撤销所有文件的修改
git checkout -- filename.. // 撤销单个文件的修改
注意如果文件修改后还在工作区的话,执行上面命令就会回到和版本库的状态。如果已经执行add指令了又做了修改,执行上面指令就会回到添加暂缓区后的状态,如果你已经commit了就会回到最近一次的commit版本状态
- 合并分支
git checkout master #先切换到master分支
git merge develop #合并分支develop和主干master,合并后的提交点属于主干master
注意:这里又几个参数需要了解 默认为
fast-forward只是简单的把指针右移动,不过如果删除分支的话,会丢失merge分支信息。–squash把一些不必要commit进行压缩。–no-ff关闭fast-forward模式,在提交的时候,会创建一个merge的commit信息,然后合并的和master分支
git merge develop
git merge develop –squash
git merge develop –no-ff
- 打本地Tag
git tag xxx
- 删除本地Tag
git tag -d xxx
- 推送Tag到远程
git push --tags
- 删除远程Tag
git push origin --delete xxx
版本回退
- 回退到上一次提交
git reset —head HEAD~1 // 这里的1是上一次,如果写2的话就是回退到上上一次提交
注意:
这里的--head的意思为:删除工作空间改动代码,撤销commit,撤销git add .
注意完成这个操作后,就恢复到了上一次的commit状态。
--mixed:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
--soft:不删除工作空间改动代码,撤销commit,不撤销git add .
- 取消最近一次提交提交
git revert HEAD
- 撤销执行提交
git revert <commit> 可以撤销指定的提交, 要撤销一串提交可以用 <commit1>..<commit2> 语法。 注意这是一个前开后闭区间,即不包括 commit1,但包括 commit2
git revert --no-commit f7742cd..551c408
然后重新提交推送到远程即可
git rebase使用
场景一:
我修改了代码准备推送到远端,但是由于远端有代码更新,git提示我先pull更新代码,我pull成功了之后,会生成一个新的提交历史
f63ecbf Merge branch 'master' of如果你不想分叉的话执行下面命令
git rebase // 合并提交
git push // 推送远端
或者 pull的时候加参数
git pull --rebase
场景二:
不同分支之间的合并。比如你新起一个分支开发新功能,开发完成后想合并到主分支,但是这个时候主分支已经不是之前的版本了,这个时候你合并必定会有冲突。你解决完冲突后再次提交合并会成功,但是提交记录会出现分叉的情况。如果不想分叉执行下面代码
在feature分支上执行
git rebase master // 这句命令的意识是:以master为基础,将feature分支上的修改增加到master分支上,并生成新的版本。
然后失败-解决冲突之后执行
git add .
git rebase --continue // 通过git rebase — continue,继续完成之前的rebase操作
然后切换到主分支master,将feather分支上的提交合并过来
git checkout master
git merge feature
最后删除feature分支即可
git branch -d feature