• git廖雪峰


    所有的控制版本系统,只能跟踪文本文件的改动(TXT文件,网页,程序代码等)

     

    而图片,视频这些二进制文件,虽然可由版本控制系统管理,但没法跟踪文件的变化。

     

    创建版本库

    • mkdir learnGit
    • cd learGit
    • pwd
    • git init

    通过

    • ls -ah

    查看隐藏文件,可看到    .git文件

     

    把文件添加到版本库:

    先写好一个readme文件放到 learnGit文件夹下

    • git add readme.txt
    • git commit -m “wrote a readme file

    其中 -m 后面输入的为本次提交说明,可输入任何内容,要有意义

    Git支持一次提交多个文件

    • git add file2.txt file3.txt
    • git commit -m “add 2 files

     

     

    时光机穿梭

     

    查看都有说明文件被修改了

    • git status

    查看目标文件修改的具体内容,wq可直接退出,键盘上下键可翻页

    • git diff readme.txt

    知道了具体的修改内容后,再将它提交到仓库中

    • git add readme.txt

    不会有任何回应,再次查看状态,将看到修改后的文件,此文将将被提交

    • git status

    最后使用commit提交文件

    • git commit -m “changed my readme file
    • git status

    随时查看状态,告诉自己有什么被修改过

     

    版本回退

    head指向那个版本,当前版本就为哪个版本

    Head 指向的版本就是当前版本,git log可查看想要回到的版本,git reflog重返未来可查看对版本都做过什么操作,git reset —hard +版本号 可回到未来

     

    • git log     查看历史提交信息
    • git log —pretty=oneline    历史提交信息每一条都简化为一条,前面的一连串为版本号
    • git reset —hard HEAD ^    回退到上一个版本(记住后面的那个符号),21世纪去19世纪
    • git reset —hard 5397ad2        后面的为版本号,从19世纪回到21世纪
    • git reflog       记录你对版本修改的每一次命令

     

    工作区和暂存区

     

    工作区:

    电脑里能看到的目录,比如我们的learnGit文件夹就是一个工作区

    版本库:

    工作区有一个隐藏的目录.git,这个不算工作区,而是git的版本库

    .git中存了很多东西,最重要的为stage的暂存区,还有git为我们自动创建的第一个分支master,以及指向master的一个指针交HEAD

     

    1.git add    把文件添加到暂存区

    2.git commit   把暂存区的所有内容提交到当前分支

    由于git为我们创建了分支,因此,之前的git commit都是往master分支提交。

    一旦git commit之后,并且没有对工作区做任何修改,那么暂存区就是“干净”的

     

     

    管理修改

     

    只会提交第一次的内容,因为没有git add (错误)

    第一次修改——》git add ——》第二次修改——》git commit   

     

    两次内容合并后提交     (正确)

    第一次修改——》git add——》第二次修改——》git add——》git commit

     

    撤销修改

    (还未add前)将文件内容撤销到本次修改前,git status上会有提示是否可以git checkout

    • git checkout — readem.txt

    (Add之后)将暂存区退回到工作区

    • git reset HEAD readem.txt

     

    删除文件

    如果删除了并且已经commit,则恢复到最新版本即可找到之前文件,但最近的修改将找不回,仅可恢复到最新文件

     

    真的想删除

    • rm ancg.txt       工作区删除
    • git status         将告诉你发生了什么变化
    • git rm ancg.txt      在git中也删除
    • git commit -m “remove ancg.txt”      最后commit提交

    如果是误删文件,想要找回

    • git checkout —ancg.txt

     

     

    添加远程仓库

    本地有了一个git仓库,github上也建了一个远程仓库,想要让两个仓库进行远程同步。

    上面的anchaoguang为github账户名,添加后远程仓库的名字就是origin(默认,可改)

    • git push -u origin master     将当前分支master推送到远程

    上面的    master是本地仓库分支,origin为远程仓库名(默认,可改)

    由于origin是空的,我们第一次推送master分支时,加上-u参数,git不会把本地master分支推送到远程新的master分支,还会把本地的master分支和远程master分支关联起来,在以后的推送或者拉取时就可以简化命令。

     

    工作中当然还是关联master分支最好

     

    从远程库克隆

    将远程仓库的文件克隆到本地库

    上面anchaoguang为账户名,learnGit为项目名

     

    创建和合并分支

    使用checkout或者swich,除了创建并切换不同,其余可用swich替代checkout

    Swich中创建并切换为

    • git swich -c dev

     

    Check中创建并切换

    • git checkout -b dev       创建并切换到dev分支

    上面的 -b 表示切换的意思,相当于以下两条命令

    • git banch dev
    • git checkout dev

    查看当前分支

    • git branch

    在分支修改工作区文件并add及commit,dev分支的工作完成,接下来合并到master

    • git add readem.txt
    • git commit -m “branch test

    切回master并merge合并

    • git checkout master
    • git merge dev

    合并完之后,就可以删除分支了

    • git branch -d dev

    解决冲突

     

    当两个分支修改了同一个内容时,将产生冲突

    在最后合并的时候,会报错,产生了冲突

     

    • git status           可以看状态
    • Cat readem.txt   查看文件可看到产生冲突的位置

    在改完冲突之后再    add   commit merge即可

    • git log —graph —pretty=oneline —abbrev-commit         看到分支合并情况

     

    分支管理策略

    通常合并分支时,git会用到fast forward模式,删除分支后,会丢掉分支的信息

     

    如果要强制禁用fast forward模式,git就会在merge时生成一个新的commit,这样在分支历史上就可以看出分支信息

     

    • git merge —no-ff -m “merge with no-ff” dev

    Fast forward 合并就看不出来曾今做个的合并,

    禁用之后就可以看了

     

    Bug分支

     

    当接到一个处理bug通知,master有bug急需处理,而现在dev分支的东西写到一半怎么办。

     

    • git stash      先将当前工作现场“储存起来”(dev中)
    • git checkout master    先切到master
    • git checkout -b issue-101      创建临时分支用来修复bug
    • add   commit
    • 切回master
    • 合并分支,删除临时分支
    • 切到工作分支,dev
    • Git stash list    查看刚刚保存的工作现场到哪去了

    方式1.

    • git stash apply    恢复,但恢复后还需git stash drop来删除

    方式2.

    • git stash pop        恢复,并删除stash内容

    早期的bug被发现之后,回直到,dev中也是有bug的,因此可使用以下命令

    • git cherry-pick 4c805e2        复制提交所做的修改

    4c805e2   为修改后提交号,,,,

     

    Feature分支

    每添加一个新功能最好开一个新分支,开发完后切回,合并,删除

    当还未合并时,接到命令需要删除featrue分支

    • git branch -D featrue-vulcan

    上面-D为大写D,强制删除,,,,featrue-vulcan为分支名

     

    多人协作

    • Git remote     查看远程库信息
    • git remote -v 显示更详细信息

    推送分支

    • git push origin master       将本地master推送到远程origin
    • git push origin dev             将本地dev 推送到远程

    push前一定要先pull,拉取最新代码,

    • git branch —set-upstream-to=origin/dev dev

    origin/dev 为远程origin下的dev        后面的dev为本地dev,将两个dev绑定

    • git pull
    • git commit -m”fix
    • Git push origin dev

     

    Rebase

     

    • rebase操作可以把本地未push的分叉提交历史整理成直线;
    • rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

    标签

    用来使用标签替代原有的那一串数字字母(commit id)

     

    切换到打标签的分支上

      • Git tag v1.0     当前分支打标签
      • Git tag             查看所有标签
      • git log --pretty=oneline --abbrev-commit       查看所有提交记录
      • git tag v0.9 f52c633          将commit id为f52c633    改为v0.9标签
  • 相关阅读:
    设计模式之一(策略模式)
    电脑开机进入不了XP界面
    IBM X系列笔记本通过U盘安装系统方法全攻略
    DELPHI 访问其它电脑文件(局域网)
    笔记本维修小插曲 屏幕不亮处理方式
    delphi 笔记
    电脑小子的新婚夜
    如何得到动态链接库的输出函数(delphi tdump.exe)
    sql server重复数据处理
    如何使用jQuery向asp.net Mvc传递复杂json数据Filter篇
  • 原文地址:https://www.cnblogs.com/acg88688/p/11870568.html
Copyright © 2020-2023  润新知