权限问题则在前面加sudo

创建版本库

  • 先在文稿-github那里建好项目文件夹
  • 然后进入那个文件夹
  • git init

关联远程库

git remote add origin [url]

上传push

  • git add .(撤销:checkout
  • git commit -m "描述"
可能需要先拉别人的代码
  • git pull origin master
    解决冲突 合并
  • git push origin master

git push -u origin master -f
第一次需要强制(咱也不知道为什么)

查看origin

git remote -v

更改origin数据源

  • git remote rm origin
  • git remote add origin [url]

查看仓库状态

git status

查看修改内容

git diff

本地覆盖远程内容

git push origin 分支名 --force

版本回退

  • 查看提交历史(确定要回退到哪个版本)
    git log
  • 查看命令历史(确定要回到未来的哪个版本)
    git reflog

撤销修改

  • 直接丢弃工作区的修改(其实可以直接改原文件……
    git checkout -- file
  • 丢弃缓存区的修改
    git reset HEAD <file>
    git checkout -- file

分支

  • 查看分支:git branch
  • 创建分支:git branch <name>
  • 切换分支:git checkout <name>或者git switch <name>
  • 创建+切换分支:git checkout -b <name>或者git switch -c <name>
  • 合并某分支到当前分支:git merge <name>
  • 删除本地的bug分支git branch -d bug
  • 删除远程的bug分支git push origin --delete bug

合并

git merge和git rebase的区别
在这里插入图片描述
假如你有6个程序员一起工作, 你就会有6个程序员的分支, 如果你使用merge, 你的代码历史树就会有六个branch跟这个主的branch交织在一起。
那个画风我相信对你一定很熟悉。想着那个画风感觉到一切都好无助, 有个词儿比较合适,叫做欲仙欲死。
这就是merge命令下生成的代码分支历史。
那么rebase又能做到什么程度呢?Rebase永远不会导致多个历史分支进行交织。它永远都是一条线。纯洁而又干脆。轻轻爽爽的, 从不拖泥带水。
那为什么会这样呢?
先说一下merge。Merge命令会保留所有commit的历史时间。每个人对代码的提交是各式各样的。尽管这些时间对于程序本身并没有任何意义。但是merge的命令初衷就是为了保留这些时间不被修改。这样也就形成了以merge时间为基准的网状历史结构。每个分支上都会继续保留各自的代码记录, 主分支上只保留merge的历史记录。子分支随时都有可能被删除。子分子删除以后,你能够看到的记录也就是,merge某branch到某branch上了。这个历史记录描述基本上是没有意义的。
还有一个比较有意思的是你不能,也不应该去修改这个历史记录描述。那是因为这个merge记录里面,不仅仅包含你自己的代码,也包含别人的代码。到这里你能想象有多乱吧?
再来说一下rebase, 这个命令会始终把你最新的修改放到最前头。比如你对主branch进行rebase以后, 你的所有修改就会在主branch当前所有的修改之前。你会更有信心保证你的代码运行畅通无阻。通过你自己的测试以后, 你就可以放心的把代码合并到主的branch里面了。
这里值得一提的是,rebase通常是发生在自己的个人branch上的。它的基础就是现有的主branch。这样做的好处就是保证每个人的代码都可以运行在当前最新的主branch的代码上。

修改commit

修改上一次git commit 提交的信息可以使用以下命令git commit --amend

git log
查看提交的历史记录,看到最新的一条提交记录需要修改,按q退出
git commit --amend
进入编辑页面,该编辑页面类似于vim,
编辑页面
其中的second commit就是可以修改上次提交的内容,只需要按下 [ insert ] 键就可以修改了,修改完成之后保存退出(按下[ Esc ] 键,然后输入 :wq)
步骤三
git log
可以查看提交的commit已经发生改变了
步骤一和步骤三可以不用执行,git commit --amend会改变commit id

版本回退

(本地)git reset --hard 要回滚的版本号 ,再 git reset 最新的版本号
(远程)git revert

撤销操作

git rmgit reset的区别
git rm:用于从工作区和索引中删除文件
git reset:用于将当前HEAD复位到指定状态。一般用于撤消之前的一些操作(如:git add,git commit等)。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐