zoukankan      html  css  js  c++  java
  • Git使用总结

    1  学习Git的方式

    学习git最好的方式就是项目中使用git来管理版本代码,这样才会遇到各种问题,然后你才会想去想办法解决,印象才会深刻,否则学了后也只会记得简单的add、commit和push操作

    这里推荐一个入门git教程网站,它可以相当于玩游戏一样来学习git,可视化的界面让你对git的命令执行有个画面,更好理解git的运行方式,这里附上该教程网站的地址:https://learngitbranching.js.org/

     

    自己练习可以在github上创建一个仓库,然后建立分支来练习,可以利用github本身可视化建仓库流程建立一个仓库,然后本地端clone下来即可

    如果是在windows下练习的话建议下载一个git bash软件,打开后像使用linux shell一样使用,很方便。还可以下载一个tortoisegit,一般用来查看当前文件修改地方,因为查看文件差异部分还是得可视化界面才直观点。

     

    2  Git的基本命令

    2.1  常用本地仓库操作命令

    初始化当前目录为git仓库:

    git init

    可以将一个目录初始化为git仓库,比较少用,一般我们都是从已有仓库里clone下来,自己练习可以创建一个目录然后初始化为一个本地git仓库(建议还是直接clone一个远端仓库,这样既可以练习本地端的也可以练习远程端的操作)

     

    查看当前分支的仓库状态:

    git status

    经常用来查看当前工作区改动的文件有哪些

     

    添加修改文件:
    git add 文件名

    如果想添加当前目录下所有的修改文件,则执行:

    git add . -A

     

    commit修改的文件:

    git commit -m 备注内容

    这是把git add的内容提交到本地,作为一次提交记录

     

    修正上次的commit:

    git commit --amend

    该命令很强大,它可以把这次add的修改融合到上一次的commit里,且支持修改上一次commit的备注,当执行完后上次commit的uuid也会变化

    举个例子:

    我一开始修改了一个a文件,然后add,然后commit

    这时我发现我还需修改一个b文件,但不想再commit一条记录,这时我们可以修改b文件,然后add,然后执行git commit --amend,此时会弹出窗口可以让你修改上一次commit的备注(也可以不修改)且告诉你改了哪些,然后wq退出就可以看到还是一条commit记录

     

    查看提交记录:

    git log

    可以看到已经提交的记录,每个记录都会有个uuid,方便对提交进行其它操作使用的,后面会使用到

    使用tortoisegit看提交记录会更友好点

     

    回退版本:

    使用git reset,它能回退到某个版本,但文件内容还是更改过的,只不过是未add状态

    回退到上个版本:git reset HEAD^

    如果是好几个版本前则:git reset HEAD~num

    num是数字,表示回滚到多少个版本前

    有很多版本其实用git reset 版本uuid 更好,免得数错了

     

    撤销版本改动:

    git revert跟git reset功能有点像,但表现出来的效果是不一样的,git revert它是把内容改动变回到某个版本并进行提交操作了,它相当于你手动改回某个版本一模一样的内容然后commit一个提交,如下图:

     

    提交了个revert 1的提交

    而reset则是真的退回到某个版本,前面的版本好像没有一样

    比如我再执行git reset HEAD~2

    这是回退2个版本到1版本,可以看到现在的git log

     

     

    已经是看不到刚才的2提交和revert 1提交了,我们再看git status

     

    可以看到内容回退了,但改动还是未add状态

    一般我们比较常用到的是git reset

     

    恢复文件到某个版本的内容:

    git checkout uuid 文件名

    如果想把它恢复到当前提交版本的内容则接着使用git checkout -- 文件名

    文件名如果是目录则回滚整个目录

    如果是放弃当前某个文件的改动则:

    git restore 文件名

     

    移动HEAD指向:

    git checkout commit_uuid

    相当于将HEAD指针移动到某个commit点上

    可以使用git checkout 分支名又回到该分支指向的提交上

    如果要强制移动某个分支指向的commit点,则:

    git branch -f 分支名 commit_uuid

     

    查看当前工作区有哪些分支:

    git branch

     

    创建分支:

    git branch 分支名

    在当前分支的基础上创建分支

     

    切换到某个分支:

    git checkout 分支名

    使用git checkout -b 分支名 可以创建并切换到该分支(经常使用)

     

    分支改名:

    git branch -m oldbranch newbranch

     

    rebase合并提交:

    git rebase -i HEAD~2

    这是代表我将前两个提交合并为一个

    举个例子:

    我原先的git log是这样的:

     

    我想将1和2这两个提交合并为一个,只保留1的提交备注,但内容是1和2两个commit的改动合并则执行git rebase -i HEAD~2(如果是合并前3个则是HEAD~3)

     

    将第2个pick改为s并wq保存退出,s的含义我们可以看到是提交到上一个commit里,意思就是commit内容合并到上一个commit里即1那里

     

    然后会让你选择备注,你可以删除掉2的备注然后wq保存退出

     

    修改后:

     

    使用git log可以看到只有1的提交记录了,但内容是1和2的提交合并的

     

    cherry-pick选择合并:

    cherry-pick常常是用在将某个其它分支的提交点合并到当前分支上,举例子,比如当前分支是test分支,想要将test2分支上的commit_uuid1提交点的改动合并过来,则:

    git cherry-pick commit_uuid1(如果想合并多个提交点,则空号相隔,比如git cherry-pick c1 c2)

     

    分支合并:

    git merge 分支1 分支2

    合并分支1和分支2

     

    2.2 常用远程仓库操作命令

    克隆远程仓库:

    git clone xxx.git

    如果是想要克隆指定分支则:

    git clone -b 分支名 xxx.git

     

    查看本地分支与远程分支的对应关系:

    git branch -vv

      

    添加本地仓库与远程仓库关联:

    git remote add origin xxx.git

    用的比较少,一般clone下来后自动就关联了,除非是自己git init了个项目,然后想推送到远端上建立一个仓库

     

    删除当前远程连接的仓库关联:

    git remote remove origin

     

    推送分支到远端:

    完整原型:git push origin <source>:<destination>

    git push origin 分支名 等价于 git push origin 分支名:分支名

     

    获取远端分支数据:

    完整原型:git pull origin <source>:<destination>

    注意这个source是远程分支名,destination才是本地,跟push的相反

    一般本地分支同步远端的分支数据直接执行git pull即可

    当然也支持当前分支拉取其它分支数据,比如git pull origin master:test,不过一般不常使用,最常用还是更新对应端的远端分支数据,所以最常使用git pull命令

     

    拉取某个分支到本地:

    git fetch origin :test

    拉取远端test分支到本地并切换到test分支

     

    删除远端分支:

    git push origin :bar

    删除远端bar分支,这命令可以理解为将本地空分支推给远端,故远端分支被删除掉

     

    3  Git的冲突处理

    当自己的远端test分支要合并到远端master分支冲突时的处理步骤(以分支test存在冲突为例):

    (1)切到主分支:git checkout master

    (2)更新本地主分支最新代码:git pull

    (3)把本地的要上库的分支删除: git branch -D test

    (4)在当前主分支下创建一个test名的分支:git checkout -b test

    (5)找到要提交的代码(id可以直接在github上copy提交的id):git cherry-pick 332c5e25a5a93c9f6e95e7fae8b46919260416aa,此时可能会提示你冲突,cherry-pick变为cherry-picking

    (6)git status查看冲突的文件,打开它手动编辑冲突的地方,解决完后add命令添加

    (7)解决完冲突并修改提交信息:git cherry-pick --continue。(如果想终止cherry-pick则可以git cherry-pick --abort)

    (8)强推分支:git push origin test -f

     

    4  Git的小技巧

    回到上一个分支名:

    git checkout -

    类似于cd -的操作,回到上一次的目录

     

  • 相关阅读:
    【搜索结果】高亮显示
    【搜索面板】排序单选
    【搜索面板】价格信息单选
    根据接口返回的数据重组数组
    Array.from
    获取指定字符串第n次出现的位置索引
    Object
    验证码倒计时
    iview Form表单正则验证
    网络图片转base64格式
  • 原文地址:https://www.cnblogs.com/luohaixian/p/12905748.html
Copyright © 2011-2022 走看看