git实用命令

2020-02-26  本文已影响0人  zeroAzrael

由于不支持[TOC]只能手动目录了இ௰இ
我的博客:PowerScript

初学者推荐看廖雪峰的git教程
本篇文章就是对其教程上的内容进行整理

主要操作

git init
# 可在提交到版本库前多次使用
git add <file>
git status
git diff <file> #比较工作区和暂存库的文件
git diff HEAD --<file> #比较工作区和版本库的文件
# 一次性提交所有暂存区文件
git commit -m "your commentary"

优化配置在“其它”的“别名”里<a href="#alias">点这</a>

git log #输出从最近到最远的提交日志,版本变化时也会变化
git log -1 #最近一次
git log --pretty=oneline #更加简洁地输出
git reflog #查看命令历史,可以用来回到未来的版本
git reset --hard <cmmit id>
#除了commit id,HEAD也可用,HEAD指向当前版本,HEAD^指向前一个版本
#同理HEAD^^指向上上个版本
#HEAD~100指向往上的第100个版本
# 如果暂存区有内容就回到暂存区,否则回到版本库
# 文件删除了也可以用这条命令从版本库里恢复
git checkout -- <file>
# 将暂存区中的内容删除
git reset HEAD <file>
git rm <file>
git commit -m "text"
git tag <name> # 创见一个标签
git tag #查看所有标签
git tag <name> <commit_id> # 可给以前的id打标签
git show <name> # 查看标签信息
git tag -a <name> -m "text" <commit_id> # 创建有说明文字的标签
git tag -d <name> # 删除标签
# 远程操作相关(下面)
git push origin <name> # 推送某个标签到远程
git push origin --tags #一次性推送所有尚未推送到远程的本地标签
# 若要删除远程的标签
git tag -d <name> # 先删除本地标签
git push origin :refs/tags/<name> #再用该命令

远程仓库

提交

注意用tag提交在上面几行("标签"中)

# 生成密匙对
ssh--keygen -t rsa -C "youremail@example.com"
# 查看公匙
cat ~/.ssh/id_rsa.pub
# 仓库放了公匙后添加到远程仓库
git remote add origin git@github.com:xxx/xxxx.git
# 第一次上传文件(其实-u起到了关联分支的作用)
git remote # 查看链接的远程仓库
git remote -v # 也可以查看
git push -u origin master
# 之后上传文件
git push origin master
# 此时就不能按原来那样命名origin了,要命不同的名字
git remote add github git@github.com:xxx/xxxx.git
git remote add gitee git@gitee.com:xxx/xxxx.git
git remote rm origin # 如删除原有的github仓库
git clone git@github.com:xxx/xxxx.git
# 创建远程仓库的dev到本地(原因是上面的命令默认拉去master分支)
git checkout -b dev origin/dev
# 拉去dev分支
git pull
# 若出现错误提示(no tracking information),把提示命令复制下来,如下
# 指定两branch的链接(一次就行)
git branch --set-upstream-to=origin/<branch name> <branch name>
# 再pull
# 之后再手动解决冲突
#再提交
git commit -m "text"
git push origin dev

分支相关

git branch # 查看分支
git branch <branch name> # 创建分支
#切换分支
git checkout <name>
git switch <name> # 同样可以
# ------
# 创建+切换分支
git checkout -b <name>
git switch -c <name> # 同样可以
# ------
# 合并某分支到当前分支,启用[Fast forward](即完成后删除那个分支)
git merge <naem> 
# ------
git branch -d <name> # 删除分支(已合并)
git branch -D <naem> # 强行丢弃一个没被合并的分支
git log --graph # 查看分支合并图
git log --graph --pretty=oneline --abbrev-commit # 简洁一点
# 合并某分支到当前分支,不启用[Fast forward](即不删除那个分支,利于团队合作)
# --no-ff表示 不删除
# -m 即要新建一个commit
git merge --no-ff -m "text" <branch name>

一般管理图

======master====>
    ^          ^
====|=dev======|========>
      ^              ^
======|==Mike===>    |
=================Bob=|==>

Bug分支

# 假设现在为dev分支,要到master分支上修bug
git stash # 把当前工作现场暂时储存起来
# 现在用'git switch'可以看到工作区是干净的
git checkout master
git checkout -b issue-101 #如果已有,则不用'-b'
# 然后修复文档,如index.php
git add index.php
git commit -m "fix bug 101"

git switch master
git merge --no-ff -m "merged bug fix 101"

git switch dev
git stash list #列出储存的工作现场
git stash pop #恢复并删除stash
# 刚才的命令等价于'git stash apply'加上'git stash drop'
# 'git stash pop stash@{0}'等可以指定,apply、drop也可以这样。
# 若dev分支也有master上的bug
git cherry-pick <commit_id> # 把刚才在master上的特定提交复制到dev上

其他

git rebase # 作用是把提交历史变成一条直线
# 可以用git log --graph --pretty=oneline --abbrev-commit 查看提交历史
#不建议随便用,因为别人开发也会受到影响

只需要在工作区下添加".gitignore"文件即可
有现成的配置文件

<span id="alias">

git config --global alias.st status # st就表示status了, git st
# 使git log更加好用 git lg
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"
# 由于我的yellow显示为white,就改了一下:
git config --global alias.lg "log --color --graph --pretty=format:'%C(bold red)%h%Creset -%C(bold cyan)%d%Creset %s %Cgreen(%cr) %Cred<%an>%Creset' --abbrev-commit"
# 其它如git reset HEAD file 改为 git unstage 
git config --global alias.unstage 'reset HEAD'

至于GUI版git自建git服务器不在本文范围内

上一篇下一篇

猜你喜欢

热点阅读