Git 命令总结

Git 命令

mkdir test
cd test
touch a.md

alias 设置别名

git config --global alias.co checkout

git config --global alias.psm 'push -u origin master'

git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative" 格式化log日志

git config --global core.editor "vim" 设置Editor使用vim

git config --global color.ui true 开启Git输出着色

git config --global core.quotepath false 设置显示中文文件名,false为显示中文名

git config -l 查看自己的配置

初始化、查看状态

git init 初始化仓库

git status 查看状态

添加移除版本控制

git add file 添加文件进入git版本控制

git rm --cache file 移除版本控制,只是将已添加到版本控制的文件移出版本控制

删除文件

git rm file 工作目录中删除文件,直接删除文件,接 commit 提交删除

rm file 是 shell 的删除指令,在删除后需要 add 指令添加再 commit 提交

提交

git commit -m "info" 提交 -m 提交信息

git commit --amend -m "info" 紧跟上次 commit,修改上次 commit 时的提交信息

版本回退

git checkout file 未 add 的时候丢弃改动,抛弃当前本地所做所有改动,恢复到最后 add 的版本或最后 commit 的版本,不会移除 add 的版本

git reset file add 操作之后撤销 add,使用历史区的版本替换暂存区的版本,工作区的不变,可以重新 add

git reset HEAD/HEAD^/HEAD~100 file 回退相应 file 已经 commit 的提交,reset 掉提交的记录中 file 发生的修改,但不修改本地工作区,可以从新提交。区别于库的回退,库回退会回退所有文件,这里的回退只是回退该文件内容

git reset --hard HEAD/HEAD^/HEAD~100 将整个代码库回退到相应的版本, HEAD 表示当前版本 HEAD^ 表示上一版本,会将当前工作区、暂存区中的所有代码恢复到指定的版本,并指定版本之后的 commit 记录全部清除,相当于恢复到指定版本时的状态

查看记录

git blame file 追溯一个指定文件修改历史记录

git log 查看所有产生的commit记录

git shortlog 根据提交者的名字分组显示提交 log

git reflog 查看所有产生的 commit 记录,包括 reset 时移除的,并且使用 reset --hard 指令也会将内容恢复到对应版本

diff 查看改动

git diff 查看改动 红色代表删除的,绿色代表增加的,git diff 只能查看没有添加到缓存区的差异,就是没有git add的文件

git diff file 查看该文件有何改动

git diff v1.0 v1.1 比较两次提交之间的差异

git diff master develop 在两个分支之间比较

git diff --staged 比较暂存区和版本库差异

git diff HEAD/HEAD^/HEAD~100 比较提交节点直接的差异

checkout 切换分支或版本

git checkout develop 切换分支

git checkout v1.0 切换tag,切换到某次commit

git checkout ffddllllll commit_id,每次commit的SHA1值

git checkout a.md 撤销没有添加到缓存区的改动,没有git add的变动

stash 暂存

git stash 将没有commit的代码暂存,add了也沒关系,git status会看不到任何改动,将代码恢复到上次 commit 后时的状态,并将上次 commit 后发生的修改暂存

git stash list 查看暂存区的记录

git stash apply 将暂存的代码还原

git stash drop 将一条stash记录删除,后面跟可以跟 stash_id 参数来删除指定的某条记录,不跟参数就是删除最近的

git stash pop 跟 apply 功能一样,区别是 pop 不但会将代码还原,还自动删除该条 stash 记录,省去 drop 一次的操作

git stash clear 清空所有暂存区记录,drop只删除一条,后面跟可以跟stash_id参数来删除指定的某条记录,不跟参数就是删除最近的,clear是清空

github

  1. 配置ssh ssh-keygen -t rsa 生成密钥 id_rsa id_rsa.pub 将id_rsa.pub配置到github

    • 配置用户名 git config --global user.name ""
    • 配置邮箱 git config --global user.email ""
    • 可以再随便一个项目中执行以上代码擦除全局配置的个人信息
  2. git remote add origin git@github.com:renxuelong/GitStudy.git
    将本地的代码添加一个远程仓库,origin 是这个远程仓库的名字,可以随便起
    一个项目可以由多个远程仓库,提交到不同的仓库就需要不用的仓库名

  3. git push -u origin master 推送 本地 master 分支到远程仓库 origin 的 master 分支,加 -u 为将本地 master 分支和远程 master 分支关联起来,之后的 push 就不需要 -u 参数了

  4. git pull origin master 将 origin 远程仓库 master 分支上的代码同步到本地

  5. git pull --rebase 指令拉取最新修改,该指令作用为拉取本地代码后,将本地未提交的代码作用到最新版本中,避免多余的 mergy history

  6. git remote 查看当前项目有哪些远程仓库

  7. git remote -v 查看当前项目所以远程仓库的详细信息

  8. git remote rm origin 移除 origin 远程仓库

  9. git push origin develop:develop2 将远程分支取名为develop2,不建议本地跟远程分支名不同,建议本地分支跟远程分支名要保持一致

  10. git push origin develop 将本地 develop 分支推送到远程 origin 仓库中

  11. git push origin :develop 删除远程 origin 库中的 develop 分支

  12. git checkout develop origin 将远程分支迁到本地,测试无效

  13. git checkout -b develop origin 将远程分支迁到本地并切换到该分支

  14. git push origin v1.0 推送 Tag 到远程仓库

  15. git push origin --tags 推送本地所以 tag 到远程仓库

brach 分支

git branch 查看本地分支

git branch -r 查看远程分支

git branch -a 列举所有本地和远程分支

git brach develop 在当前分支基础上新建分支,分支 develop 跟当前分支内容一样

git checkout develop 切换分支

git checkout -b a 新建一个a分支,并且自动切换到a分支

git branch -d develop 删除本地分支,前提是a分支中的代码已经merge到了master分支,否则会删除失败

git branch -D develop (强制删除)

git push origin :develop 删除远程 origin 库中的 develop 分支

git checkout develop origin/develop 将远程分支迁到本地,测试无效

git checkout -b develop origin/develop 将远程分支迁到本地并切换到该分支

git merge a 将 a 分支的代码合并到当前分支,可能发生冲突,这时会把冲突代码显示到代码中,开发者自己删除废弃代码,完成合并操作

git 分支存储原理: 不同于 SVN 每个分支都是备份一下整个库文件,git 不论是创建分支还是记录版本都不会创建整个文件或者分支的备份,而是通过创建一个指针指向不同的文件或分支,切换分支或者版本记录都只是改变指针指向的位置,git 实际是使用了很少的存储空间来记录一切

tag 标签

tag 可以认为是一个快照,一个记录点,用于记录某个 commit 点或分支的历史快照,tag 通常打在 master 分支上,以保证代码的准确性

git tag v1.0 新建代码版本标签,默认记录在最后一次 commit

git tag v1.0 commit_id 在 commit_id 对应的 commit 处新建 tag

git tag 查看版本标签

git tag -a v1.0 -m "tag message" 通过 -a 参数指定添加 tag 信息,-m 参数为 tag 的信息

git show tagname 查看指定 tag 的详细信息

git tag -d v1.0 删除指定 tag

git push origin :ref/tags/v1.0 删除本地 tag 后再推送到远程仓库删除远程仓库的 tag

git checkout v1.0 切换到某个标签

git push origin v1.0 推送 Tag 到远程仓库

git push origin --tags 推送本地所以 tag 到远程仓库

merge & rebase

merge 合并

git checkout master 切换到 master 分支

git merge featureA 将 featureA 分支上的代码合并到 master 分支上

rebase 合并

git checkout master 切换到 master 分支

git rebase featureA 将 featureA 分支上的代码合并到 master 分支上

merge 和 rebase 的区别在于,merge 直接将 featureA 的代码放到另一空间

rebase 则是将两个分支上的代码先进行比较,按时间重新排序,然后放置,优点是合并后代码很有逻辑,缺点是不知道哪些代码来自哪个分支

冲突解决

conflicts 冲突

冲突的地方有=======分出上下两部分,上部分一个有HEAD的字样代表是我当前所在的分支的代码,下半部分是要合并到的分支的代码,比较后,删除了老旧代码,同时删除 <<< HEAD ========这些标记符号,再进行一次commit就可以了

Git Flow

git flow"是一种比较成熟的分支管理流程

  • master:永远处于即将发布(production-ready)状态
  • develop:最新的开发状态,develop 分支属于测试环境
  • feature:开发新功能的分支,基于 develop ,完成后merge回develop,开发新功能时基于 develop 新建一个分支feature/A,开发完成后merge回develop分支,规定所有的功能分支都已 feature 为前缀
  • release:准备要发布的版本,用来修复bug,基于develop,完成后merge回develop和master, develop分支属于测试环境,跟后端对接并且测试差不多时,这时候新建一个 release 分支,这时候 API、数据等都是正式环境,这个分支上做最后的测试,bug修改,测试ok后 merge 到 develop 和 master ,然后发布
  • hotfix:修复master上的问题,等不及release版本就必须马上上线,基于master,完成后merge回master和develop。线上的紧急bug需要修改,这时候需要切换到master分支,在此基础上新建hotfix/B分支,修复完成后直接合并到 develop 和 master ,然后发布。

master --> develop --> master

develop --> feature --> develop

master --> hotfix --> develop&master

master --> release --> develop&master

Git Flow 管理开发流程

git flow init 初始化 git-flow 功能,默认设置,完成后当前分支就变成了develop,然和开发都必须从develop开始
git flow feature start some_awesome_feature 创建名为 some_awesome_feature 的分支
git flow feature publish some_awesome_feature Publish一个feature(也就是push到远程)
git flow feature pull origin some_awesome_Feature 获取Publish的feature
git flow feature finish some_awesome_feature 该命令会把 feature/some_awesome_feature 合并到 develop 分支,然后删除feature分支,必须将改变commit后才可以使用该命令,该命令也会将publish到远程的feature删除

git flow release start v0.1.0 需要发布新版本时,基于develop创建一个发布分支,然后升级版本号,修改bug。
git flow release publish v0.1.0 Publish一个release,但是并没有pull的方法
git flow release finish v0.1.0 在完成(finish)一个发布版本时,它会把所做的修改合并到 master 分支,同时合并会 develop 分支。
git push --tags finish一个发布版本后,应该git push版本号,不用git tag,git push --tags 会将当前release的版本号作为tag提交

git flow hotfix start 0.0.1 开始一个 Hotfix
git flow hotfix finish 0.1.1 发布一个 Hotfix

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容