关于git基本使用

git 的一些注意事项
  • 需要说的是git不同于svn,git是分为本地仓库远程仓库的,我们平常的操作都是通过对本地仓库完成的
    • 只有需要将本地仓库的内容push到远程仓库或从远程仓库更新时 才会和远程仓库发生联系
    • 所以不需要象svn那样时刻都需要有网才能commit,我们可以直接只操作本地仓库就可以了
    • 同时一个文件的状态对于git来说是存在于 git的工作目录 , 暂存区 , 本地仓库 3个状态的
    • 我们使用svn或cvs时 只要从工作目录 commit 到中心仓库就可以了
    • 但是由于git存在暂存区,所以在git这里,只有通过add 命令被添加到暂存区的文件,才可以commit 到本地仓库.
关于git的安装
  • 由于大多数人都是windows的系统 所以我们这里只列出了windows的安装,其他系统可以自己度娘
    • 可以由http://msysgit.github.io/ 下载相应安装程序进行安装 中间的选项默认就好
    • 如果你不使用其他git管理工具,请更改如下操作
      • msysgit的安装目录中的etc/git-completion.bash文件增加alias ls='ls --show-control-chars --color=auto'
      • 编辑etc/gitconfig在文件中的[core]部分添加如下部分quotepath = false
      • profile中增加一行 export LESSCHARSET=iso8859
    • 以上3条操作都是为了防止一些显示及提交的中文乱码等问题
关于git的配置
 git config --global user.name "sampson"
 git config --global user.email "pojo888@126.com"
  • 可以通过如上命令添加自己的用户名及邮箱地址
  • 每次 git 提交时都会引用这两条信息,说明是谁提交了更新
  • --global 选项说明以后你所有的项目都会默认使用这里配置的用户信息
  • 如果要在某个特定的项目中使用其他名字或者邮件,只要去掉--global在当前目录配置即可,新的设定保存在当前项目的.git/config 文件里
  • git config --list命令用来查看当前的配置.
关于git的一些基本命令
  • git可以新建一个git项目目录,也可以从已有的git远程仓库中clone一个项目
  • 注意 这不是checkout的概念,checkout在git的世界中是切换分支版本的概念,以后会用到
    • git init 对现有的某个项目目录开始用 git 管理,命令运行后会生成一个名为 .git 的目录,所有 git 需要的数据和资源都存放在这个目录中.
    • git clone 对已有的远程仓库进行clone复制,也会生成 .git目录
  • git add 把文件加入到前面提到的暂存区
  • git commit 把暂存区中的文件提交到本地仓库中去
  • git push 把当前本地仓库的某个分支推送到远程仓库中
  • 例如
   git init
    touch README.md
    git add README.md
    git commit -m "first commit"
    git remote add origin ssh://192.168.1.58:10022/doc/gitdoc.git
    git push -u origin master
  • -m 选项为本次提交的快速注释方式(没有提交注释是不会被git允许的)
  • git remote add 为添加一个前文提到的远程仓库(需要远程仓库创建了此裸仓库)
    • 其中 origin 为远程仓库的别称,惯例用这个名称,你也可以根据需要起不同的名字
    • 远程仓库用到了ssh的方式需要ssh的key存在于远程仓库的管理系统中,在gitlab使用中会进行介绍
    • ssh key参见 gitlab 使用说明
  • push 命令会把刚才通过init命令新建的本地项目(默认为master分支) push到远程仓库
    • -u 参数是指存在多个远程仓库时 指定一个默认主机,这样后面就可以不加任何参数使用git push
    • 关于push的详细使用参见git push 的使用
  • 此时 另外一个用户即可通过 clone 从远程仓库下载了
    git clone -c http.sslVerify=false https://192.168.1.58/git/doc/gitdoc.git
    (注意这里使用了https,意味着push时需要输入你在网站注册的用户名及密码)
  • 然后我们可以 通过edit --> add --> commit --> push 的方式进行相应的操作
    • 当然我们也可以跳过add ,就是通过选项 –a
    • git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤
      git commit a m 'update xxx'
关于git的分支相关的命令
  • 分支是git的最大魅力,同时实现分支比svn要容易且快速
  • 而合并分支又是svn所不具有的功能
  • git branch sampson 就会在本地新建一个当前项目的samposn分支
    • 我们可以把sampson 想象成windows中的系统还原点,如果我现在什么都不做
    • 我任何时间切换到sampson这个分支都会对应当前的项目状态,当然前提是在这个分支上没有做任何提交
    • branch sampson 并不会切换到sampson分支, 我们需要显式的使用 git checkoutsampson切换到sampson分支
    • 当然也可以直接使用 git checkout –b sampson 创建并切换到sampson分支
  • git fetch origin 会抓取远程仓库 origin 的更新到本地 包括远程仓库的各个分支版本
    • 但是注意 fetch并不会把这些更新融合到你的本地仓库分支中去.
  • git merge origin/master 就是把远端的master分支 融合到你当前的分支中,如果有冲突 则需要自己解决
  • git pull 命令是指针对远程仓库的分支包含了 fetch 与 merge 合二为一的一个操作
    • 当我们在sampson分支做过一些提交后 我们就可以把这个分支融合到master分支
    • 这里是从master 融合sampson,如果期间master有提交 那么就会据此产生一个新的版本
    • 即master所指向的HEAD 指针会向前进一个版本.git 中分支的融合
     git checkout master
     git merge sampson
  • git rebase master 在sampson分支中
  • git rebase master sampson在master分支中
    • huaxj 会寻找自己与master的共同祖先节点
    • 并把基于这个节点之后的所有差异化操作在master版本上重新演绎一遍
    • 然后生成一个HEAD指针在master的下一个版本的节点(同时删除了自己自共同祖先节点以来的的分支节点)
    • 这个节点是sampson分支的,master并没有改变,如果需要合并还是需要master merge操作
    • 但是这样的操作 会使得版本提交的历史看起来更流畅与线性
    • 还有更重要的一点是在rebase master的过程中,如果有版本冲突,那么就需要执行rebase的分支进行相应处理
    • 这一点在操作远程仓库时尤为明显, 先在自己的一个本地分支里进行开发
    • 当准备向master提交的时候,根据最新的origin/master 进行一次rebase操作后再提交
    • 这样master维护者就不需要做任何整合工作 直接顺利merge
    • 等于你替他把他需要处理的可能出现的冲突都已经先摆平了,谁都会喜欢这样pull request~
  • rebase --onto master sampson john1
    • 理解方式可以是把 [--onto master] 去掉,即以sampson 和john1的共同祖先rebase john1
    • 但目标结果到master上.有点难以理解,可以自己尝试下
  • 但是rebase 有个最大的潜在问题就是关系到远程仓库的
    • 一定不要把自己已经提交到远程仓库的分支rebase掉
    • 原因就是上面提到的rebase会删除自己同rebase目标分支共同祖先节点以来的的分支节点 然后生成一个新的HEAD节点
    • 所以如果已经提交到远程仓库的分支被rebase掉了,很可能有别人已经基于这个分支做了merge以及新的开发
    • 那么git提交的历史将变的一片混乱,这种事做出来会人神共愤的
    • 我在haxe openfl小组就遇到过这样的情况,大家会相当崩溃.....
    • 因为过于痛苦,所以master版本及一些重要分支都是锁定的,只有通过pull request 进行处理
关于git的其他命令
  • 没有提供详细的说明 自行度娘吧 另外一些可视化git工具都可以做这些命令的处理
  • git rm 命令删除一个文件,那么这个文件就会从被跟踪文件中移除
    • 如果只是手动删除文件那么git会认为这个文件发生了改变但未更新
    • 其实想想 为什么有git add 就明白与之对应的要有 git rm 命令了
  • git mv 命令可以进行文件的移动和重命名
  • git log 命令可以查看详细的提交历史,并且提供了过滤选项
  • git status 命令可以列出修改过的文件
  • git diff 命令可以查看暂存区与本地目录文件的区别.
  • git commit –-amend 命令 用于重新提交,处理上一次提交的错误
  • git reset HEAD 命令用于取消已暂存的文件
  • git remote –v 可以列出所有的远程仓库
  • git remote show origin 可以查看远程仓库的信息
  • git remote rename aa bb 会把远程仓库名aa 变为bb
  • git tag 命令会列出所有标签
  • git tag –l '1.0.*' 会列出对应筛选结果
  • git tag –a v1.0beta –m '1.0 beta' 建立注解标签
  • git show v1.0beta 可以查看相关信息
  • git push origin v1.0beta 标签如果想要加入到远程仓库同样需要push
  • git push origin --tags 如果新建了多个标签,也可以一次推送通过如下命令
  • git reset 版本回退
    • 如果你运行一个 git reset -help 会得到一个比较烧脑的帮助信息
    • 这个说起来…. 好吧 太复杂了,我都没信心看下去,具体需要的时候再查资料吧
    • 我基本 只会 而且是很少用到
      • git reset --hard commitId 退回某commit 版本
      • git reset --hard HEAD^ (HEAD ^ 就是父节点 ^ ^ 就是父节点的父节点) 你可能会说,我靠 这要是父节点………N回…
      • git reset --hard HEAD~3 就好了
      • git reset --hard HEAD^ check.java 只回退某个文件
      • 以及我以前会最常用的 git reset --hard origin/master

QQ群:131783959
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值