由于Git命令较多,将常使用的Git命令做一下整理与总结。
实际工作中大体也会用到这样的工作流程:
开发某个网站。
为实现某个新的需求,创建一个分支。
在这个分支上开展工作。
假设此时,你突然接到一个电话说有个很严重的问题需要紧急修补,那么可以按照下面的方式处理:
返回到原先已经发布到生产服务器上的分支。
为这次紧急修补建立一个新分支,并在其中修复问题。
通过测试后,回到生产服务器所在的分支,将修补分支合并进来,然后再推送到生产服务器上。
切换到之前实现新需求的分支,继续工作。
Git初始化设置
git config --global user.name "xxx"
git config --global user.email "519401502@qq.com"
pwd 查看当前路径
git init 将当前目录变成git可以管理的仓库
git init newrepo 指定目录变成可以管理的仓库
git add text.txt 告诉git,把text.txt文件添加到仓库。注意:每次可以多次添加。
git commit -m "update" 提交add所添加的内容到git仓库
git commit -a 跳过使用暂存区域的方式,直接提交
git commit --amend 撤销提交操作,如果刚才提交完没有作任何改动,直接运行此命令的话,相当于有机会重新编辑提交说明,但将要提交的文件快照和之前的一样。
解决合并代码冲突:
git stash
git pull
git stash pop
git status 查看当前仓库的状态
git status -s 加了-s 参数,以获得简短的结果输出。
git branch -r 查看远程分支
git checkout -b 本地分支名x origin/远程分支名x 拉取远程分支内容
git diff --cached 已经暂存起来的文件和上次提交时的快照之间的差异。
git diff text.txt 查看做了哪些修改
git log 查看我们提交内容的历史记录
git log --pretty=oneline 查看我们提交内容的历史记录,简约出现
git reset --hard head^ 退回上个版本
git reset --hard head^^ 退回上上个版本
git reset --hard head~100 退回100次之前的版本
git rm -r --cached . 删除本地缓存,改变成未track状态。如果添加了忽略文件,通常需要执行以下这个命令才会生效。
cat text.txt 查看内容
vim text.txt 编辑text内容
git reset --hard cb926e7ea50ad11b8f9e909c05226233bf755030 退回到指定版本,序列是提交序列号
git reflog 命令输入记录
git commit --amend 修改提交说明。
git checkout -- text.txt 撤销,恢复到上个状态
把一个分支中的修改整合到另一个分支的办法有两种:merge 和 rebase。
ssh-keygen -t rsa -C "youremail@example.com" 创建id_rsa和id_rsa.pub这两个文件,这是绑定GITHUB的需要用的密钥
git add . 添加所有文件,很方便,经常使用。
git add *.c 添加以.c结尾的文件
git remote add origin git@github.com:你的账号/learngit.git 关联GITHUB。
码云版:git remote add origin git@gitee.com:liaoxuefeng/learngit.git 关联码云
git clone git@github.com:你的账号/gitskills.git 克隆github的项目到本地
git push -u origin master 把本地库上传到github,并关联github
git push -u origin master -f 强推,注意:会覆盖远程库
git push origin serverfix:server 将本地serverfix分支推送到server远程库分支上。
git push origin master 把本地库上传到github,origin表示远程库的名字,可以根据git remote -v命令查看远程库名,master表示当前本地的分支,可以根据git branch 查看。
git remote rename oldname newname 修改远程仓库名的简称
git remote -v 显示远程库地址。
git remote show [remote-name] 查看远程库信息
git pull -u origin master:master 更新代码,master是分支的名称。
git push origin clien:serverfix 将本地clien分支内容推送到远程库serverfix上。
git checkout -b dev 切换并创建本地分支到dev
git checkout -b origin/text 切换远程库分支,origin是远程库名字。
git branch (当前分支前面会标一个*号)查看分支
git checkout <name> 切换分支
git merge <name> 合并某分支到当前分支
git branch -d dev 删除dev分支
git branch -D feature-vulcan 强制删除分支
git branch -m devel develop 重命名分支。
git branch --set-upstream dev origin/dev 本地dev分支与远程库dev分支建立联系
git branch dev 创建分支
git branch -r 查看远程分支
git pull 更新代码到最新
git pull github master:text 从远程库master分支拉取数据到本地text分支
git pull gitee master 指定远程仓库名,指定本地分支。
git remote -v 查看远程库信息
git log --graph命令可以看到分支合并图
git log --oneline 简洁的日志
git log -2 显示最近两次的记录。
简单介绍一些 git log 命令支持的选项:
-p 按补丁格式显示每个更新之间的差异。
--word-diff 按 word diff 格式显示差异。
--stat 显示每次更新的文件修改统计信息。
--shortstat 只显示 --stat 中最后的行数修改添加移除统计。
--name-only 仅在提交信息后显示已修改的文件清单。
--name-status 显示新增、修改、删除的文件清单。
--abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
--relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。
--graph 显示 ASCII 图形表示的分支合并历史。
--pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。
--oneline --pretty=oneline --abbrev-commit 的简化用法。
git config --list 配置信息
git stash 存储当前工作现场
git stash list 查看工作现场
git stash apply 恢复,但是恢复后,stash内容并不删除
git stash drop 删除工作现场
git stash pop 恢复并删除
添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。
git remote -v 查看远程库详细信息,上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。
git mv README README.md 重命名。
git tag v1.0 打上标签
git tag 查看标签
git tag v0.9 6224937 指定commit id打上标签
git tag -d v0.1 删除标签
git tag -l 'v1.4.2.*' 只对 1.4.2 系列的版本感兴趣,可以运行这个命令
git show v1.4 显示v1.4版本的详细信息
git push origin :refs/tags/v1.0 从远程删除远程库中的标签
git push origin --tags 推送本地所有标签到远程库。
git push origin v1.0 默认情况下,git push 并不会把标签传送到远端服务器上,推送某个标签到远程。
git push origin --tags 一次性推送全部尚未推送到远程的本地标签
git tag -a <tagname> -m "blablabla..."可以指定标签信息;
git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;
git remote rm origin 删除关联
git push -f 强推,注意:会覆盖远程库
git config --global alias.st status 设置别名,给status设置别名为st。
git log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit 查看提交历史树。
git remote set-url --push [name] [newUrl] 修改远程仓库
git tag -a [name] -m 'yourMessage' 创建带注释的tag
git reset head . 从暂存区撤销
git reset HEAD text.txt 将单个文件撤销
git push --delete origin devel 删除远程库分支
git push origin :devel 删除远程库分支serverfix - 第二种方法
git push origin text 创建远程库分支,将本地当前分支提交到远程text分支中, 远程若没有text分支,则会自动创建。
问题解决(! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'git@git.oschina.net:519401502/text.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
)的出现原因在于:git仓库中已经有一部分代码,所以它不允许你直接把你的代码覆盖上去。于是你有2个选择方式:
1,强推,即利用强覆盖方式用你本地的代码替代git仓库内的内容
git push -f
2,先把git的东西fetch到你本地然后merge后再push
git merge
这2句命令等价于
$ git pull
忽略某些文件上传 步骤如下:
1.cat .gitignore 先创建名为 .gitignore的文件。
2.内容对应的git过滤含义:
①:.[oa] 忽略所有以 .o 或 .a 结尾的文件
②:~ 忽略以~结尾的文件
③:doc/*.txt 忽略 doc/ 目录下所有扩展名为 txt 的文件
④:!lib.a lib.a除外
3.gitignore 的格式规范如下:
①:所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
②:可以使用标准的 glob 模式匹配。
③:匹配模式最后跟反斜杠(/)说明要忽略的是目录。
④:要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
git reflog使用、查看历史版本记录,此命令可以救命!!当你强行切换分支但忘记提交代码时造成代码丢失,可以根据此命令回退。
最后分享一张常用命令图标(摘自网络)