• git的几十个基本面


    1、下载git?
    git-scm.com

    2、获取帮助
    git help
    git help config

    3、什么是Git?
    版本控制系统,Version Control System, VCS。它允许我们提交变化到源代码管理库,并且跟踪变化。允许develope在同一套代码库上协同工作。是现代的、分布式版本控制系统。

    4、一些关键词?
    Branch
    Merge
    Commit:发生在本地
    Push
    Pull

    5、git的历史
    创建于2005年,一开始Linux kernel使用BitKeeper作为版本控制系统,后来Linus kernel和BitKeeper拆分,BitKeeper的拥有公司无法再提供免费服务,Linux需要一个新的版本控制系统替代BitKeeper,Linux的程序员们开始重造轮子,并在以后完善了社区,并诞生了GitHub.

    6、CVS和DVC?
    CVS是Centralized Version Control,程序员们向同一台中央服务器提交;DVC是Distributed Version Control,每个人都有自己的代码控制库,每次提交是提交到本地的,每次提交了一个新版本的代码,然后是push到远程。多人协作的一个场景:A和B协同工作,A把代码commit到本地,B直接从A的本地代码库pull,当A完成阶段工作,push到远程代码服务器,B现在可以从远程代码库pull代码了。

    7、一些命令?
    init,创建本地代码库
    status,本地代码库的状态,显示没有commit的变化
    add,把文件放到本地代码库
    commit,把变化提交到本地代码库
    log,显示提交的所有变化
    push,push所有的变化到远程代码服务器,还可以提交到多个地方
    pull,从远程代码服务器或其它代码库pull变化
    merge,合并变化

    8、git配置

    git config --global user.name "darren"
    git config --global user.email "764190362@qq.com"
    git config --global --list

    信息被存放在了管理员文件夹中的.gitconfig文件中,大致是:
    [user]
        name = darren
        email = 764190362@qq.com

    git config --global core.editor note 使用哪个编辑器
    git config --global help.autocorrect 1 当出现错误命令会有提示
    git config --global color.ui auto 设置字体颜色等
    git config --glboal core.autocrlf false windows下推荐使用

    以上的设置是System级别的。

    还可以设置用户级别的,用户级别可以覆盖System级别。

    git config user.name "jack"

    用户级别移除设置:git config --unset core.autocrlf

    9、创建本地代码库, 追加文件, 提交变化

    → 来到某个文件夹,打开命令行窗口
    → 创建本地代码库
    git init
    → 在文件夹内创建一个README.txt文件
    → 查看本地代码库的状态
    git status
    红色字体表示没有被tracked的文件
    → 把文件添加到本地代码库,使文件可以被track
    git add README.txt
    git add -u 用来add刚被更新的文件,而不是刚添加的文件
    git add -A add所有文件到staging area被track等待被commit
    此时,再运行git status,README.txt变成绿色,说明已经被track
    → commit变化
    git commit
    → 查看历史
    git log

    10、历史版本和版本差异

    → 查看历史版本
    git log
    → 查看版本差异
    git diff dd6819..a15ec6
    → 查看最近的历史版本
    git diff HEAD
    → 查看最近的历史版本之前的版本
    git diff HEAD~1
    → 查看最近历史版本和之前一个版本的差异
    git diff HEAD~1..HEAD
    也可以写成
    git diff HEAD~1..

    11、一次修改多次提交

    → 假设修改了2个文件
    README.txt
    file.txt
    → 查看状态
    git status
    此时可以看到修改的文件呈红色状态。通常一次commit就好,但这里就分两次commit
    → 第一次add
    git add file.txt
    → 第一次commit
    git commit -m "blablabla"
    → 第二次add
    git add README.txt
    → 第二次commit
    git commit -m "second blablabla"

    12、删除文件
    → 删除file.txt文件
    → 查看状态
    git status
    deleted file.txt 并且是红色字体
    → 把删除也放到staging area
    git add -u
    → 查看状态
    git status
    deleted: file.txt 并且是绿色字体
    → commit
    git commit -m "blablabla"

    也就是说,对于删除的文件,也需要使用git add -u,把删除的文件放在staging area。

    13、重命名文件
    → 把file.txt重命名为newfilename.txt
    → 查看状态
    git status
    deleted: file.txt 红色字体(被重命名的文件在git看来是deleted状态)
    nefilename.txt 红色字体(新的文件在git看来是一个untracked状态)
    → 把deleted状态的文件和新文件放到staging area上去
    git add -A
    → 查看状态
    git status
    renamed: file.txt → newfilename.txt 绿色字体(git 记录下了重命名过程)
    → commit一下
    git commit -m "blablabla"

    14、撤销改变
    → 修改某个文件,比如README.txt
    → 查看状态
    git status
    modified: README.txt 红色字体
    → 撤销修改
    git checkout README.txt

    15、撤销多个改变
    → 修改某个文件,比如README.txt
    → 删除某个文件,比如newfilename.txt
    → 查看状态
    git status
    modified: README.txt 红色字体
    deletedL newfilename.txt 红色字体
    → 撤销这2个改变
    git reset -hard
    → 查看状态
    git status
    回到最近的一次HEAD

    16、删除文件
    → 创建文件
    temp1.txt
    temp2.txt
    → 查看状态
    git status
    temp1.txt 红色字体
    temp2.txt 红色字体
    → 删除文件
    git clean -f

    17、忽略文件
    → 假设创建logs文件夹和线面的log.txt
    → 查看状态
    git status
    logs/ 红色字体
    → 创建.gitignore文件,内容如下:
    /logs/*.txt
    /logs/*.log
    → 查看状态
    git status
    .gitignore 红色字体
    → 把.gitignore文件放到staging area
    git add .gitignore
    → 提交
    git commit -m "Added .gitignore"

    18、拷贝远程网站到本地
    → 拷贝
    git clone https://github.com/jquery/jquery.git
    → 查看所有的提交
    git log
    git log --oneline

    19、查看数据
    → 查看总共多少次提交
    git log --oneline | wc -1
    → 查看带图标
    git log --oneline --graph
    → 查看哪些人提交了哪些
    git shortlog
    → 查看哪些人以及邮件
    git shortlog -sne
    → 查看更多
    比如在github网站上,有一个Graphs菜单,里面有更详尽的信息。

    20、查看提交
    → 展示最后一次提交
    git show HEAD
    → 展示倒数第二次提交
    git show HEAD~1
    → 展示所有提交
    git log --oneline
    → 展示最后10次变化
    git show HEAD~10
    → 展示某一次提交
    git show 5642626
    → 查看远程
    git remote
    origin 远程名称为origin的代码库
    → 查看远程更多
    git remote -v
    origin https://github.com/jquery/jquery.git(fetch)
    orgin https://github.com/jquery/jquery.git(push)

    21、Git Protocol

    ● git支持http、https、git、ssh和file协议
    ● http的默认端口是80,https的默认端口是443,可以设置
    ● 对于比如说github上的网站,通常读取是自由的,但写通常需要密码
    ● git protocol
    git 9418 git://github.com/jquery/jquery.git
    ● ssh protocol
    ssh 22 git@github.com:jquery/jquery.git
    ● file protocol
    file n/a /Users/James/code/jquery

    22、查看分支和标签
    → 查看本地分支
    git branch
    → 查看远程分支
    git branc -r
    → 查看tag
    git tag
    可以看到所有版本

    23、本地代码库复制到远程,在远程创建代码库
    → 在本地代码库基础上创建远程代码库
    git remote add origin https://github.com/Darrenji/example.git

    24、从远程fetch
    → fetch
    git fetch
    把远程所有变化拉到本地
    → fetch某个分支
    git fetch origin

    25、远程变化同步合并到本地
    → 远程有一个变化,有可能是另外一个程序员提交
    → 同步合并到本地
    git merge origin/master

    26、从远程拉
    → 查看远程分支
    git branch -r
    origin/master 红色字体
    → 现在准备拉pull,pull等同于:git fetch; git merge origin/master
    → 建立远程和本地的映射
    git branch --set-upstream master origin/master 第一个master是指本地
    → 开始拉
    git pull

    27、推到远程
    → 本地提交一些变化
    git commit -am "blabla"
    → 推
    git push
    输入用户名
    输入密码

    当然还可以在推之前删除远程
    → 删除远程
    git remote rm origin
    → 列出远程
    git remote -v
    → 重新创建一个SSH协议的远程
    git remote add origin git@github.com:Darren/Example.git
    → 推
    git push

    注意:SSH协议这里使用SSH key进行认证用户

    28、创建标签
    → 创建标签
    git tag v1.0
    git tag -a v1.0_with_message
    git tag -s v1.0_signed
    → 列出所有标签
    git tag
    → 列出某个标签
    git tag -v v1.0_signed

    29、把标签推到远程
    → 默认情况下git不推标签
    git push --tags

    30、可视化分支
    →查看现有分支下的提交
    git log --graph --oneline
    → 查看所有分支下的提交
    git log --graph --oneline --all --decorate
    --all所有分支
    --docorate比如HEAD,tag等

    还可以把以上的选项放到全局去并使用别名调用:
    → 全局设置
    git config --global alias.lga "log --graph --oneline --all --decorate"
    → 使用新的命令
    git lga

    31、创建本地分支
    → 创建本地一个分支
    git branch feature1
    → 跳转到feature1这个分支
    git checkout feature1
    → 查看所有分支下的提交
    git log --graph --oneline --all --decorate

    32、分支和标签的区别
    branch会跟着commits,tag始终跟着一个commit。

    → 创建一个分支并让它跟着一个commit
    git branch fix1 974b56a
    → 切换到fix1
    git checkout fix1
    → 修改fix1下的某个文件
    → 提交
    git commit -am "blabla"

    33、重命名和删除分支
    → 重命名分支
    git branch -m fix1 bug1234
    → 删除分支
    git branch -d bug1234
    → 想git报告删除分支的事
    git branch -D bug1234
    → 创建并切换到新创建的分支
    git checkout -b feature2

    34、把删除的分支找回来
    → 输入如下
    git reflog

    5a78c8b HEAD@{3}: commit: Fixed bug#1234
    → 找回分支
    git branch bug1234 5a78c8b
    → 切换到找回的分支
    git checkout bug1234
    → 展示HEAD
    git show HEAD

    注意:commit保存期只有30天

    35、不提交变化隐藏变化
    → 修改某个文件,比如README.txt
    → 查看状态
    git status
    modified: README.txt 红色字体
    → 隐藏变化
    git stash
    → 查看隐藏的所有变化
    git stash list

    36、创建远程分支
    → 推到远程的某个分支上
    git push origin master
    → 把本地branch推到远程
    git push origin v1.0_fixes
    远程会多了一个分支
    → 查看远程分支
    git branch -r

    37、删除远程分支
    → 先推到远程分支
    git push origin v1.0_fixes
    git push origin v1.0_fixes:v1.0_fixes_remote_branch_name(远程和本地分支名称不一样)
    → 删除远程分支
    git push origin:v1.0_fixes_remote_branch_name

    38、git网站设置
    通常在git网站,比如github, coding.net都会有一些基本设置的地方。

    ========最近又作了一些git的练习,整理在下面====================================================

    1、Repository包含什么

    文件、历史记录、配置文件

    2、git repository的3个状态

    ● working directory:通常有一个隐藏的.git文件
    ● staging area:也叫git index
    ● commit

    3、master branch

    8d976fa→626968e→65a7416→a877955→1bf9179
    默认的brach叫master

    4、Windows安装git

    git-for-windows.github.io
    安装完后打开git bash,输入:git version

    5、简单使用

    → 在github上创建一个new repository
    → 创建目录
    mkdir projects
    → 导航到目录
    cd projects/
    → 全局配置
    git config --global user.name ""
    git config --global user.email ""
    git config --global --list
    → 复制远程git repository的地址
    → 复制到本地
    git clone https://github.com/demo/demo.git
    → 查看本地repository的状态
    git status
    一般是On branch master,默认显示名称为master的这个branch
    → 创建文件
    echo "some words" >> start.text
    → 查看文件列表
    ls
    → 显示文件
    cat start.txt
    → 查看状态
    git status
    start.txt为红色字体,表示untracked file,也就是说在working directory,还没有在staging area
    → 放到staging area中去
    git add start.txt
    → 查看状态
    git status
    start.txt为绿色字体,表示已经在staging area中了
    → 提交
    git commit -m "adding start txt file"
    → 提交到远程
    git push origin master
    远程的名称是origin,在从远处拷贝过来的时候默认就是这个名称
    master是默认的远程分支

    6、从本地的一个空目录开始

    → 创建一个目录
    → 初始化并创建一个git目录
    git init fresh-project
    → 来到刚创建的fresh-project,查看所有文件,包括隐藏文件
    ls -al
    发现有一个.git目录
    → 来到.git目录,查看
    branches/
    → 来到fresh-project目录,查看状态
    git status
    On branch master告诉我们目前在master这个branch上,我们是可以创建其它branch的
    → 创建一个新文件hipster.txt
    → 查看状态
    git status
    hipster.txt为红色字体,表示这个是untracked file
    → 放到staging area中去
    git add hipster.txt
    → 查看状态
    git status
    new file: hperster.txt 绿色字体
    → 提交
    git commit -m ""
    [master (root-commit) a7781a] ..., root-commit表示是第一次提交

    7、从本地的一个已有项目开始

    → 下载一个示例项目
    http://initializr.com
    → 比如下载项目在一个名称为web-project的目录中
    → 来到web-project目录下
    git init
    → 查看列表,包括隐藏文件
    ls al
    .git/目录存在着
    → 查看状态
    git status
    On Branch master
    → 把所有文件放到staging area
    git add .
    → 提交变化
    git commit -m ""

    8、从远程的一个git项目开始

    → 远程的git项目
    https://githbu.com/scm-ninja/starter-web
    → 点击Fork按钮把项目加入到自己的github账户下
    → 复制https url
    → 拷贝到本地
    git clone https://github.com/somename/starter-web.git

    9、简单使用add, commit, pull, push

    → 本地一个git目录
    → 创建一个新文件hipster.txt
    → 查看状态
    git status
    hipster.txt红色字体
    → add
    git add hipster.txt
    → commit
    git commit -m ""
    [master ba5b0f0],master是默认的分支,ba5b0f0是SHA-1,用来标记每一次提交
    → 从远程拉取
    git pull origin master
    强烈推荐养成的习惯:commit之后,先pull,再push
    → 推到远程
    git push origin master
    5c05047..ba5b0f0 master → master, 表示从本地的master默认分支推送到远程的master分支

    10、git的tracking files

    → 输入如下查看git repository tracking的所有文件
    git ls-files
    → 把多个修改放到staging area
    git add .


    11、回滚提交的变化

    → 从staging area中移除
    git reset HEAD level1-file.txt
    → 回滚
    git checkout -- level1-file.txt

    12、重命名文件

    → 重命名,比如把level3-file.txt重命名为level3.txt,使用git的重命名命令
    git mv level3-file.txt leve3-file.txt
    → 查看状态
    git status
    renamed: level3-file.txt → level3.txt,绿色字体
    也就是重命名后,依然在staging area,不需要重新add
    → 提交变化
    git commit -m ""


    →如果使用操作系统的命令,重命名某个文件
    mv level2-file.txt leve2.txt
    → 查看状态
    git status
    deleted: level1-file.txt 红色字体
    level2.txt 红色字体
    说明档使用操作系统的命令,会删除原先的,并且创建一个新的,并且被删除的和新建的都不在staging arean
    → add
    git add -A
    → 提交变化

    移动文件也是相似的道理。

    13、移除文件

    → 创建一个文件doomed.txt
    → git status
    doomed.txt红色字体
    → 使用git命令移除
    git rm doomed.txt
    提示无法移除,因为还没有tracking这个文件呢
    → 那就使用操作系统命令删除
    rm doomed.txt
    → ls
    没有
    → git status
    也没有
    也就是说,刚创建的文件没有被tracking,使用操作系统的删除命令是可以的


    如果删除一个被tracking的文件呢?

    → 查看所有正在被tracking的文件
    git ls-files
    比如有一个newfile.txt文件
    → 使用git命令删除
    git rm newfile.txt
    → 使用ls命令,已不再目录中
    → 使用git status
    deleted: newfile.txt 绿色字体
    → git commit -m "",也就是让repository知道这个文件已被删除
    → 使用git status
    没有
    也就是说,使用git的rm命令删除staging area中的文件,也是物理删除,执行命令后必须告诉或同步到repository,commit一下

    tracking中的文件被删除,如何回滚呢?


    → 查看所有正在被tracking的文件
    git ls-files
    比如有一个hipster.txt文件
    → 使用git命令删除tracking的文件
    git rm hipster.txt
    → ls
    发现不在目录中了
    → git status
    deleted: hipster.txt 绿色字体,说明这个文件也在staging area了,对git来说,这个文件还没有被真正删除
    → 此时想把这个文件从staging area中拉出来
    git reset HEAD hipster.txt
    → ls
    依然不在目录中
    → git status
    deleted: hipster.txt 红色字体,说明这个文件依然被track,但在目录中已经不存在。注意从staging area中拉出来和是否是tracking是两码事。
    → 回滚
    git checkout -- hipster.txt

    注意:如果我们想回滚,先必须使用reset HEAD命令把文件从staging area中拉出来
    → ls目录中存在文件,git status发现文件不再被track

    如何删除目录呢?

    → 比如有一个目录是level1
    → rm -rf level1
    → ls查看,目录已经没有
    → git status
    deleted: leve1/leve1.txt 红色字体
    deleted: leve11/level2/level2.txt 红色字体
    deleted: level1/level2/level1/level3.txt 红色字体

    level1以及子目录都标记为删除,还在track状态,但并不在staging area中
    → git add -A

    deleted: leve1/leve1.txt 绿色字体
    deleted: leve11/level2/level2.txt 绿色字体
    deleted: level1/level2/level1/level3.txt 绿色字体

    在track状态,并且在staging area了,准备提交
    → 提交变化

    14、git历史记录

    → 查看语法
    git help log
    → git log
    查看到所有的提交记录
    → git log --abbrev-commit
    查看精简的commit编号
    → git log --oneline --graph --decorated
    → git log ae6f872...761b911
    → git log --sicne="3 days ago"
    → 查看某个文件的历史记录
    git log -- hopster.txt
    → git log --follow -- level1/level2/level3
    → 查看某次提交
    git show b19...

    15、别名

    → 比如本来查看历史记录的这样写
    git log --all --graph --decorate --oneline
    可不可以写成 git hist来得到相同的结果呢?
    → 在全局配置
    git config --global alias.hist "log --all --graph --decorate --oneline"
    → 使用别名命令
    git hist
    → 如何修改别名命令呢
    实际上是存在在.gitconfig文件中,类似:
    [alias]
    hist = log --all --graph --decorate --oneline

    16、忽略不必要的文件

    → 存放在哪里呢
    .gitignore
    → git add .gitignore
    → git status
    new file: .gitignore
    → git commit -m ""
    → 来到.gitignore文件
    *.log

    17、推送
    → 先拉取
    git pull origin master
    → 再推送
    git push origin master

  • 相关阅读:
    Linux各个目录的作用及内容
    发现未授权登录用户怎么办
    开启GodMode
    通过域名方式决定使用哪个数据库的方式分享
    openerp-server.conf 中配置 dbfilter 参数无效的解决办法
    OpenERP7.0 忘记admin管理员密码解决办法
    DEB方式在UBUNTU安装ODOO 8.0
    解决apt-get的E: Could not get lock /var/lib/dpkg/lock方法
    Ubuntu 11.04 (Natty) 已经停止支持 但可以使用old-releases源了
    How to get the url of a page in OpenERP?
  • 原文地址:https://www.cnblogs.com/darrenji/p/5204198.html
Copyright © 2020-2023  润新知