git命令记录

git命令

本地仓库

  • git init 初始化一个文件夹为git仓库

  • git add 文件名 把文件夹里的文件添加到仓库(把文件放到暂存区)

  • git commit -m "描述提交内容给" 把文件提交到仓库,并添加提交内容的相关描述(把暂存区的文件提交到当前分支)

  • git status 查看此时的仓库状态,判断是否有文件被修改过.

  • git diff 文件名 当git status 查看到有文件变动个,用git diff命令可以查看具体修改内容,然后可放心的提交到仓库.

  • git log 可以查看提交日志,如果log日志眼花缭乱,可以试试加上--pretty=oneline参数

  • git reset --hard 版本id 命令可以指定当前版本为指定id的版本,Head指定的就是当前版本.版本id可写前几位.查看id的方法: 1.git log 2.git reflog

  • git reflog查看历史的版本id,此命令是记录git的操作的.

  • 回退版本也可以写成git reset --hard HEAD~数字其中数字可以是几就回退几个版本.

  • git checkout -- 文件名 让文件回复到最后一次add或者 commit时的状态(执行了git add 操作又做了修改 或者执行了git commit又做了修改,此命令都可以把修改删除回到之前执行add或commit的状态)

    场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- 文件名

    场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD 文件名,就回到了场景1,第二步按场景1操作。

    场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,可以回退版本,不过前提是没有推送到远程库。

  • git rm 文件名 用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容

  • 命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容

远程仓库

上传

本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:

第1步:创建SSH Key。

  • 用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
ssh-keygen -t rsa -C "youremail@example.com"
  • id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面,然后点“NEW SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容.

第3步:右上角找到“Create a new repo”按钮,创建一个新的仓库,在Repository name填入learngit,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库

第4步:根据git页面的命令提示,就可以将本地git仓库推送到远端了.

git remote add origin git@server-name:path/repo-name.git

git push -u origin master

  • 由于远程库是空的,第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
  • 推送成功后,可发现github和本地一模一样
  • 只要本地作了提交,就可以通过命令git push origin master做提交
  • 推送分支 git push origin 分支名称
下载

git clone 地址

分支管理

创建与合并分支
  • 添加分支 git checkout -b 分支名称 git checkout命令加上-b参数表示创建并切换,

    等同于 git branch 分支名称 git checkout 分支名称

  • git branch命令查看当前分支

  • 然后执行 add 和 commit 命令

  • 当分支工作完成 切换到主分支上 git checkout master 并且把分支上的内容合并到主干上 git merge 分支名称

  • git merge 分支名称 命令用于合并指定分支到当前分支。

  • 合并完成后,就可以放心地删除分支 git branch -d dev

解决冲突
  • 当在分支上开发时候文件做改动了,也提交到本地仓库了,又切换到主分支上,此时还没有合并分支,而又在主分支上改动了文件,也提交到本地仓库了,此时又想分支合并到主分支上,就会有冲突了.——这是其中一种冲突
  • 必须手动解决冲突后再提交。git status也可以告诉我们冲突的文件
  • Git用<<<<<<<=======>>>>>>>标记出不同分支的内容,打开文件手动修改,留下真正需要的,然后保存
  • 再执行 add 和 commit 提交到本地仓库
  • 最后在删除分支 git branch -d 分支名称
  • git log --graph命令可以看到 分支合并图
分支策略
  • 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

  • 如果要强制禁用Fast forward模式,--no-ff参数使Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

  • 新开分支干活,git checkout -b 分支名称, 做完操作(增删改…)并且也提交了然后切换到主分支上git chekout master 然后准备合并分支内容.

  • git merge --no-ff -m "提交信息描述" 分支名称 合并分支,--no-ff参数,表示禁用Fast forward本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。

  • 分支开发 主干发布.在实际开发中,应该按照几个基本原则进行分支管理:

    首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

    那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

    每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

  • 总结:开发一个新功能,最好新建一个分支;

  • 当在新分支开发的功能不需要了就不用合并了.不合并删除的话会报错,如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除,用大写字母D.

bug分支
  • 如果有需求正在分支上开发,突然之前的功能有bug,此时需要在建立一个bug分支,去修改,但是这个需求还需要点时间完成不能提交(提交可能会造成其他人的工作问题). git不允许 不提交内容就切换分支.

  • Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作.

  • 执行 git stash命令可以将分支修改存储起来.然后可以切换分支了

  • bug的产生一般都是主分支master(产生在上线的分支),就在主分支再建立分支修改bug 修改完成后合并到主分支.然后可以继续到开发分支里完成相应功能了

  • 到了开发分支 通关git stash list可以查看存储的修改

  • 一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

    另一种方式是用git stash pop,恢复的同时把stash内容也删了

  • git stash pop 恢复之前的修改 同时把stash内容删除

  • 可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:git stash apply stash@{0}

  • 实测 在开发分支不修改 已在主分支修改的bug ,合并到主分支时 不会有冲突, 主分支是 修改bug后的+开发分支上的内容. 如果在开发分支上也修改了bug 修改的不同的话 会产生冲突.

多人协作
  • 确定是否有推送权限git remote -v 如果有 push 地址就可以推送
  • git remote可以查看远程仓库名称
  • 不是所有的分支都需要往远程仓库推送,一般 开发分支 和 主分支推送到远端仓库, bug分支可以不推送.根据情况而定
  • git pull 远程仓库名称 当前分支名称 拉取远程的内容. 一般提交前都会pull一下.防止冲突.
  • 当你推送到远端时报错,可能远端版本高于本地当时推送的版本,那就pull一下,git rebase操作可以把本地未push的分叉提交历史整理成直线;
  • rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

标签

由于版本id(commit id) 太过于长不容易表述,可以设置个标签来表示一版本或者是同一类事物用共同标签

创建
  • 命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
  • 命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;
  • 命令git tag可以查看所有标签
删除
  • git tag -d 标签名称可以删除指定标签

  • 因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。

    如果要推送某个标签到远程,使用命令git push origin <tagname>

  • 一次性推送全部尚未推送到远程的本地标签:git push origin --tags

  • 要删除远程标签,先删除本地标签,然后执行命令git push origin :refs/tags/<tagname>可以删除一个远程标签。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值