1.查看日志
查看和退出,按向下箭头往下看内容,在英文状态下按q结束查看
(1) 查看某个文件的提交记录
git log filename
单行查看某个文件的提交和备注
git log --pretty=oneline 文件名
查看某个文件具体修改
git log -p 文件名
(2) 看某个人的所有提交记录
git log --author="某用户名"
2.提交相关
(1)跳过暂存区直接提交
git commit -a -m "提交信息"
(2)修改上次提交的备注信息
git commit --amend // 进入vim编辑页面,按insert或i进入编辑,修改完按Esc再输入:wq保存
3.分支相关
(1).重命名分支名称
git branch -m old_branch new_branch
old_branch和new_branch 分别代表 旧分支名称、新分支名称
修改本地分支并推送到远程
先修改本地分支名称,再推送修改后的分支到远程,最后删除远程旧分支(温馨提示:默认分支git 拒绝删除)
git branch -m old_branch new_branch//第1步:修改本地分支
git push --set-upstream origin new_branch//第2步:推送修改后的分支
git push origin :old_branch //第3步:删除远程的旧分支
步骤图如下:
参考:Git进阶(六):git 刷新分支、修改本地和远程分支名称
(2).合并分支
将branch_name分支合并到当前分支
git merge branch_name
将远程某个分支合并到当前分支
git pull origin branch_name
例如:
git checkout new-feature // 切换到当前new-feature功能分支
git pull origin develop // 合并develop分支代码到本地的new-feature分支代码
不切换分支将远程最新代码更新到某个分支
// 例如在某个功能分支,将本地的develop分支的代码跟远程develop分支对齐
git fetch origin develop:develop
// 然后在某个功能分支合并develop分支的代码就很方便了
git merge develop
(3).查看分支
git branch // 本地分支,分支前有*的代表当前分支
git branch -a //查看所有分支列表,包括远程分支
git branch --show-current //查看当前代码所在分支
(4).切换分支
git checkout develop
如果第一次clone下来的是master分支,可以通过切换到develop分支,会把远程的develop分支也拉取下来
(5).新建分支
(1) 从当前分支新建并切换到该新分支:
git checkout -b new_branch_name
new_branch_name 为新创建的自己命名的分支名
(2) 将某个commit号建立一个分支
git checkout -b new_branch_name 115ffb92f2bf44de4b899faaf6c9f48eac42a641
-b参数会切换到该新分支,new_branch_name 为新创建的自己命名的分支名
(6).将当前分支推送到远程分支
git push origin remote_branch
remote_branch远程分支名称
首次推送:
git push --set-upstream origin remote_branch
(7).删除分支
git branch -d [deleteBranchName]
[deleteBranchName] 代表要删除的分支名
有时发现敲这个命令并未马上删除,提示说要删除的分支没有被合并,如果你确定你的代码备份了,删除没用的分支就按照提示敲:
git branch -D [deleteBranchName]
删除远程分支:
git push origin --delete [deleteBranchName]
参考: Git 分支 - 远程分支
(8).克隆某个分支到本地
比如把develop分支拉取下来
git clone -b develop clone_url
clone_url 是远程克隆路径,拉取后,进入文件夹,输入git branch -a来看分支列表,不要 -a 时是本地的分支,参考:git clone 指定分支 拉代码
(9)只拿取某个提交记录的文件变动到某个分支
git cherry-pick [commitHash]
有个小坑,如果cherry-pick同事的代码,下次commit时发现author竟然是同事,得修复一下
(注: amend命令只会修改最后一次commit的信息)
$ git commit --amend --reset-author
4.工作区相关
(1).清理工作区
把工作区某个文件的变化丢弃
git restore 路径/文件名
将工作区所有跟踪过的文件变化清理干净
git checkout .
清理未跟踪的文件
先演习:
git clean -d -n // 演习查看将要删除的文件,但不删除
使用git clean 清理未跟踪文件时,建议先git stash push "message" -u
将所有改动包括未跟踪文件先贮藏一下,git stash apply拿回刚贮藏的改动后再清理,否找很难找回刚清理的文件
git clean -f // 删除已跟踪文件夹下的未跟踪文件,但不删除未跟踪文件夹下的文件
git clean -df // 删除所有未跟踪的文件和文件夹
(2).将暂存区文件放回工作区
git reset HEAD <file> // 将某个文件从暂存区放回工作区
git reset HEAD . //将所有暂存区文件都放回工作区
reset命令很危险,小心使用
(3).比较各区变化区别
git diff //查看暂存区与工作区的区别,diff后面接某个文件则是查看某个文件的对比变化
git diff HEAD //查看工作区和暂存区两个与本地仓库的区别
git diff --cached //查看本地仓库与暂存区的区别
(4).版本回退reset
git reset (--mixed) HEAD~1
reset的默认方式,--mixed可不写,参数前有2个-
可回退一个版本,且会将暂存区的内容和本地已提交的内容全部恢复到【未暂存】的状态,不影响原来本地文件(未提交的也
不受影响)
git reset --soft HEAD~1 或 git reset --soft HEAD^
回退一个版本,不清空暂存区,将已提交的内容恢复到【暂存区】,不影响原来本地的文件(未提交的也不受影响)
git reset --hard HEAD~1
回退一个版本,清空暂存区,将已提交的内容的版本恢复到本地,本地的文件也将被恢复的版本替换
更多:撤销远程提交
5.远程仓库
(1).拉取代码
拉取远程代码合并到本地
git pull
(2).首次推送
git remote add origin git@github.com:xxx/xxx.git //先跟远程服务器建立关联
git push --set-upstream origin 某分支名
(3).切换远程仓库路径
git remote set-url origin https://xxx.xxx/xxx/xxx
如果是gitlab通过access token的方式,则最后的url的格式为 https://oauth2:xxxxx@xxx.xxx/xxx/xxx,@前面是token值,@后面则是仓库地址路径
6.stash贮藏
(1)将工作区的变化存在stash
git stash
git stash push -m "message" //贮藏时备注信息
git stash push -m "message" -u //加参数-u存未跟踪的文件
旧的:
git stash save "message" //2017 年 10 月下旬,Git 邮件列表上进行了广泛讨论,该讨论中弃用了 git stash save 命令, 代之以现有 git stash push 命令
git stash save "message" -u //加参数-u存未跟踪的文件
参见 : Git 工具 - 贮藏与清理
(2)查看存起来的stash内容
git stash show -p //查看最近一次的stash记录
git stash show -p stash@{***} //查看某一次stash的记录
git stash list //查看所有贮藏区列表
git stash list --date=local
git stash list --date=relative
git stash list --date=short
(3)将存的stash应用在工作区
git stash apply //将最近一次存起来的stash应用在工作区
git stash apply stash@{***} 或 git stash apply 'stash@{***}' // 将某个stash应用到工作区
(4)清除贮藏
git stash pop // 应用最后一次stash到工作区,并把它从列表中移除
git stash drop stash@{***} // 清除某一次stash贮藏
git stash clear //清除stash列表,这个需要谨慎
7.别名管理
设置别名
git config --global alias.pg 'push origin HEAD:refs/for/develop'
通过设置别名使得推送到gerrit的长命令变得简洁,简洁推送命令就替换一大串代码:git pg → git push origin HEAD:refs/for/develop
删除别名
git config --global --unset alias.pg
查看设置好的别名
git config --list |grep alias // git bash 条件下
git config --list // 很多配置信息都有,要找到alias
修改别名
进入电脑用户名文件夹,快捷键windows系统 开始键 + .
找到.gitconfig文件
找到之前设置好的别名进行修改和保存
8.git升级
git --version //先查看版本
git update //0.17.1之前用
git update-git-for-windows //0.17.1之后用
9.遇到的问题
(1)报错fatal: refusing to merge unrelated histories
解决方案:最后加上 --allow-unrelated-histories
参考: git pull 提示错误 fatal: refusing to merge unrelated histories
10.更多参考
可视化工具 source tree : GUI for git|SourceTree|入门基础