zoukankan      html  css  js  c++  java
  • 有用的git片段

    世界上知识那么多,又岂是人力所能穷尽,于是术业有专攻。对于git,有用的命令片段其实非常少,而命令却是非常多。于是,掌握git常见的用法就足够了。不要在语句级别上记忆git命令,在代码片段级别上记忆git命令更好,因为git命令往往是几个命令总是出现在一种片段里面。

    零、初始化仓库

    Git global setup:

    git config --global user.name "再见理想"
    git config --global user.email "iexmyth@gmail.cn"
    

    Create Repository

    mkdir webapp-mall
    cd webapp-mall
    git init
    touch README
    git add README
    git commit -m 'first commit'
    git remote add origin git@gitlab.beyond.com:app/webapp-mall.git
    git push -u origin master
    

    Existing Git Repo?

    cd existing_git_repo
    git remote add origin git@gitlab.beyond.com:app/webapp-mall.git
    git push -u origin master
    

    一、gitignore生效

    改动过.gitignore文件之后,在repo的根目录下运行:
    git rm -r --cached .
    git add .
    之后可以进行提交:
    git commit -m "fixed untracked files"

    在windows新建gitignore时,写成.gitignore.就会创建.gitignore文件

    二、未提交本地更改就pull报错

    error: Your local changes to the following files would be overwritten by merge:
            why.txt
    Please commit your changes or stash them before you can merge.
    Aborting
    

    解决方法一:错误提示没有提交本地更改,那么提交本地更改就可以pull了。
    解决方法二:使用stash命令

    git stash  把修改保存到暂存区
    git pull 拉取远程分支
    git stash pop 弹出修改
    

    两种方法最终效果一样,只是解决方法一会多一条提交记录。

    三、已经push到了远程,想要把远程仓库恢复到push之前的状态

    不小心把一些秘密文件push到了github上,必须撤销commit。有人赶紧在本地把秘密文件注释一些之后重新commit,这样只能掩人耳目,实际上很容易被干翻。试想攻击者clone了你的仓库,可以直接回退到原始的有秘密文件的版本。所以必须撤销push到远程的这些commit

    需要注意的是,这样做是有风险的,远程仓库会彻底删除一些提交导致无法回退到那些提交。

    git log --oneline 找到想要退回到的commidId
    git reset <commitId> --hard 彻底回退到某次提交前的状态,相当于删除之后的提交,但仓库内容并不会删除
    git push origin head --force 推送到远程分支
    

    四、远程有三个分支,删除一条分支

    三条分支分别为A和B和C,删除A分支之后把B分支改名为master设置为默认分支

    1、本地分支的创建和删除

    git branch dev 创建分支
    git checkout dev 切换分支
    一系列操作之后commit
    git checkout master 切换到主分支
    git merge dev
    手动修改一些文件
    git add *
    git commit -m "edit something"
    git push origin head
    git branch -d dev 删除分支
    

    git branch -b dev 创建并切换分支

    2、删除远程分支

    git branch -av 查看全部分支,-a表示all,-v表示verbose
    git push origin --delete <branchName> 删除远程分支,这是新版命令,旧版命令是git push origin :<branchName>
    

    3、重命名远程分支

    git中没有直接进行重命名远程分支的命令,只能通过:重命名本地分支、推送本地分支、删除远程分支三步走才行。

    git push命令后面本来是要加具体分支名的,如果不加,那就是用默认分支,所以git中有默认分支的概念。
    注意,无法删除默认分支,在github上可以手动设置默认分支。

    git branch -m <旧分支名称> <新分支名称>   重命名本地分支
    git push origin <远程分支名称>   推送到远程分支,如果不存在,则创建此分支。其中,推送的内容默认是与之同名的本地分支。所以必须保证同名的本地分支存在。
    git push origin -d <旧的远程分支名> 删除远程分支
    

    五、本地提交了很多次,push时只想push一次

    首先看一下我的提交

    $git log --oneline
    
    1029842 edit why.txt
    a2f2489 ok
    9367492 update why.txt add '天为'
    948c103 add why.txt
    5f802ee add baga.txt
    de7fd6f add haha.txt
    

    然后执行rebase命令

    git rebase -i de7f 命令不用写全,写够前4位即可
    

    这时会弹出vim来,可以用pick squash drop等命令来处理每次提交。
    pick表示保留提交,squash表示把某次提交压缩到上一次的提交,drop表示放弃某次提交。
    其中第一行表示最早的一次提交,那次提交是不可以squash的,要想squash就必须有上一次提交。

    最后,git push --force 强制更新远程仓库。

    六、git pull和git fetch的区别

    git pull=git fetch+git merge
    git fetch命令只进行拉取远程分支,没有进行合并

    七、push.default 默认的远程分支

    push.default可用的值如下:

    1.nothing

    不推送任何东西并有错误提示,除非明确指定分支引用规格。强制使用分支引用规格来避免可能潜在的错误。

    2.current

    推送当前分支到接收端名字相同的分支。

    3.upstream

    推送当前分支到上游@{upstream}。这个模式只适用于推送到与拉取数据相同的仓库,比如中央工作仓库流程模式。

    4.simple

    在中央仓库工作流程模式下,拒绝推送到上游与本地分支名字不同的分支。也就是只有本地分支名和上游分
    支名字一致才可以推送, 就算是推送到不是拉取数据的远程仓库,只要名字相同也是可以的。在GIT 2.0中,simple将会是push.default的默认值。simple只会推送本地当前分支。

    5.matching

    推送本地仓库和远程仓库所有名字相同的分支。这是git当前版本的缺省值。

    一般来说我们使用simple就可以进行正常的使用,如果严格一点儿可以用nothing。配置push.default的命令如下:
    git config --global push.default simple

  • 相关阅读:
    java8 新特性
    class类加载机制
    redis和memcache的区别
    Nginx,Apache,Tomcat区别
    java synchronized锁的理解
    java BIO,NIO在单服务器,多客户端通信上的应用
    理解spring任务调度timer,Quartz,spring task
    理解同步与异步,及java中实现同步机制的方法
    java范型的理解
    正向代理,反向代理的理解
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/7299002.html
Copyright © 2011-2022 走看看