git 常用命令和使用

  1. 工作区 add 暂存区 commit 本地仓库 push -> <- clone 远程仓库

    拉去指定分支代码 git clone -b dev https://xxx.git

  2. git log 可以显示所有提交过的版本信息 git reflog查看所有分支的操作记录(包括已删除的 commit 记录和 reset 的操作)

    git reset --hard HEAD~1 // 回退到上一个版本
    
    git log --pretty=oneline // 使用git log看不到reset的操作
    
    git reflog // git reflog可以看到reset的操作
    
    git reset  --hard 9039b57 // 然后就可以重新恢复
    
  3. git commit --amend

    amend 原意就是"修正"的意思,工作中常用到以下几种

    • 只修正文件,不修正提交信息,如提交的时候发现有文件忘记提交,先添加到暂存区,在使用下面的命令进行修正,之后就可以看到提交中已经有了忘记提交的文件
      git commit --amend --no-edit

      Q~X~~TFURLM~FWCS8U{04NY.png

      如果多提交了文件,也可以先通过git rm --cached <文件名>,再通过以上命令修正
      1649831979(1).jpg

    • 只修正提交信息,如提交时发现写的提交信息不太正确时,可通过以下命令修改
      git commit --amend -m "feat: ceshi"

      1649831831(1).jpg

    • 修改提交信息和文件
      git commit --amend

  4. git stash 和 git stash pop

    git stash 暂存当前正在进行的工作, 比如想 pull 最新代码, 又不想加新 commit,或者为了 fix 一个紧急的 bug, 先 stash,使返回到自己上一个 commit, 改完 bug 之后再 stash pop, 继续原来的工作

    git stash save "message" 暂存时加备注 方便查找

    git stash show 默认显示第一个改动 如果显示其他 git stash show "stash@{1}"

    git stash show -p 改动的具体

    git stash apply 恢复第一个存储 恢复其他使用 git stash apply "stash@{1}"

    git stash drop "stash@{1}" 删除第一个存储

    git pop git apply 和 drop 结合体

    git stash clect 清空

  5. git merge 合并

    • Fast-forward (-ff)

      当前分支相比于要合并的分支没有额外的提交时,执行 fast-forward 合并,这类合并不会创建新的提交,而是会将我们正在合并的分支上的提交直接合并到当前分支

    • No-fast-forward (--no-ff)

      如果当前分支具有要合并的分支不具备的改变时,会执行 no-fast-forward 合并,会在当前活动分支上创建 merging commit,这个提交的父提交(parent commit) 既指向这个活动分支,也指向我们想要合并的分支

  6. 合并冲突

    当合并出现冲突时,git 会展示冲突出现的位置,可以手动修改,再次添加已修改的文件,并提交

  7. 变基(Rebasing)

    通过 git merge 可以将一个分支的修改应用到另一个分支,git rebase 可以将一个分支的修改融入到另一个分支

    git rebase 将当前分支的提交复制到指定分支

    如当前在 dev 分支,使用git rebase master,可以在 dev 分支上获取 master 上的所有修改

    变基与合并最大的区别:Git 不会尝试确定要保留或不保留哪些文件。使用 rebase 不会遇到合并冲突,而且可以保留漂亮的、线性的 git 历史记录

    使用:如果在开发一个 feature 分支并且 master 分支已经更新过,就可以使用 rebase 在此分支获取所有更新,防止未来出现合并冲突

    git mere 和 git rebase 小结

    git rebase 与 git merge 对比

    假如有两个分支

           D---E test
          /
     A---B---C---F--- master
    

    git merge 后生成

           D--------E
          /          \
     A---B---C---F----G---   test, master
    

    git rebase 后生成

    A---B---D---E---C‘---F‘---   test, master
    

    merge 操作会生成一个新的节点,之前的提交分开显示。
    而 rebase 操作不会生成新的节点,是将两个分支融合成一个线性的提交,不会增加新的提交。

  8. 交互式变基(interactive Rebase)

    在为提交执行变基之前,我们可以使用交互式变基修改它们,交互式变基在当前开发的分支上以及想要修改某些提交时有用

    在我们正在 rebase 的提交上,可以执行以下 6 个动作:

    • reword:修改提交信息
    • edit:修改此提交
    • squash:将提交融合到前一个提交中
    • fixup:将提交融合到前一个提交中,不保留该提交的日志信息
    • exec:在每个提交上运行我们想要的 rebase 命令
    • drop:移除该提交
  9. 重置(Resetting)

    git reset 能让我们不在使用台面上的文件,控制 HEAD 应该指向的位置

    • 软重置

      假如已经 commit 的文件有问题,想撤销提交,但又想保留文件,这时候就可以使用git reset --soft HEAD~1将 HEAD 指向前一次提交,通过 git status 可以看到这些文件,然后可以重新修复并提交

    • 硬重置

      有时候并不想保留特定提交引入的修改,Git 应该直接将整体状态重置到特定提交之前的状态,使用git reset --hard HEAD~1

  10. 还原(Reverting)

另一种撤销修改的方式是执行 git revert,对特定的提交执行还原操作

假如某个提交添加了一个引用文件 index.js,但之后发现不再需要这个文件,那么就可以使用git revert 2175894还原那个提交,而且也不会修改分支的历史

  1. 精选(Cherry-picking)

    当一个特定分支包含当前活动分支所需的某个提交时,可以对那个提交进行 cherry-pick,此时会在当前分支上创建一个新的提交,包含由精选出来的提交所引入的修改

    假如 dev 上 index.js 文件添加一项修改,希望整合到 master,但又不想合并整个 dev 分支,使用git cherry-pick 2175894引入特定修改

  2. 取回(Fetching)

    fetch 只是单纯下载新的变动

  3. 拉取(Pulling)

    git pull实际上是两个命令:git fetchgit merge,拉取最新变动并自动合并到本地分支

    git pull --rebase变基式合并

  4. Reflog

    每个人都会犯错,但犯错其实没啥!有时候可能感觉你把 git repo 完全搞坏,让你想完全删了了事。

    git reflog可以展示已经执行过的所有动作的日志,包括合并、重置、还原,包含你对分支所作的所有修改,如果犯了错,可以通过重置 HEAD 来轻松重做

    假如我们合并 dev 到 master,但是并不需要这次合并,当执行git reflog后,可以看到 repo 状态合并前位于 HEAD@{1},执行git reset HEAD@{1},将 HEAD 重新指向 HEAD@{1}的位置。

  5. Tag

    git tag # 在控制台打印出当前仓库的所有标签

    push 单个 tag,命令格式为:git push origin [tagname]
    例如: git push origin v1.0

    git push origin --tags // 所有 tag

    git tag 1.4.10 50435cd 指定 commit 打 tag

    git tag -d xxx // 删除本地 tag

  6. 删除分支

    git branch -d xxx
    git branch -D xxx // 强制删除分支 不关心合没合并
    git push origin --delete xxx // 删除远程xxx分支

配置别名
git config --global alias.st status
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.co checkout
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"

加入 global 表示对修改全局,如果不加,只对当前仓库起作用

配置文件.git/config 中

别名就在[alias]后面,要删除别名,直接把对应的行删掉即可

全局 Git 配置文件放在用户主目录下的一个隐藏文件.gitconfig

fork 项目--更新

Fork 别人的项目后,如何再同步更新别人的提交

  1. 添加远程仓库

    image-20210510090300202.png
  2. 拉取远程分支代码

image-20210510091654353.png
  1. 合并本地代码

    git merge upstream/master
    
  2. 推送到 fork 的远程分支

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

推荐阅读更多精彩内容