标签 git 下的文章

git是一个很好的代码管理工具,有些时候有些文件,比如缓存等我们是不需要被管理的,但是有时候我们在创建项目的时候不小心会添加上。当我们要去掉的时候,一般会想到的是修改.gitignore这个文件,但是当我们将 .gitignore 文件修改配置好后,却疆场的不能失效。导致我们以后每一次修改都会上传一些无用的文件,很是麻烦。这是因为 .gitignore 只能忽略那些没有被追踪(track)的文件,因为 git 存在本地缓存,如果文件已经纳入了版本管理,那么修改 .gitignore 是不能失效的。那么解决方案就是要将 git 的本地缓存删除,然后重新提交。下面小编说下解决的命令:

git rm -r --cached .
git add .
git commit -m "update .gitignore"

小编发现最近在使用git diff这个命令的时候,有些代码明明没有修改,却标识修改过,末尾加上了个^M。很奇怪啊,我们先说下^M的由来:
这个是由于 Windows 和 Unix 下的换行符不一致导致的,Windows 下,换行符是 \r\n,在 Unix 下换行符是 \n。如果我们用把一个文件的换行符换成 Windows 的换行符就会出现这样的问题,实际上 ^M 就是 Windows 下的换行符中的 \r 部分。因为 Unix 下的换行符是 \n,所以当一个用 Windows 下的换行符的文件放在 Unix 下的时候,单行的最后一个字符就变成了 \r\r 在 ASCII 码中是 0xD,而 0xD 在 VIM 和 cat -v 则刚好被显示为 ^M,这次明白了吧。

解决办法:
我们可以git diff的时候忽略换行符的差异:

git config --global core.whitespace cr-at-eol

首先我们明白两个命令的作用:

  • git add把文件修改添加到暂存区;
  • git commit提交更改,把暂存区的所有内容提交到当前分支。

从暂存区里面恢复至普通文件(绿字变红字):
如果是撤销所有的已经add的文件:git reset HEAD .
如果是撤销某个文件或文件夹:git reset HEAD -filename

版本回退,也就是回退某个commit:git reset --hard 版本号(版本号就是通过git status获取)
撤销没add文件的修改(红字变无) :git checkout --filename
7.jpg

74444007_p0-1140x600.jpg
在开发一个项目的时候,一般不可能一直在写自己当前的任务,往往是当前任务写的正火热的时候,又来了新的紧急性任务,或者出现了bug需要处理,那出现这种情况的时候怎么弄呢,当前的任务还没做完,还不能发布,这时候我们总不能把刚写的代码删除了吧。哈哈!!!不用,我们只需要执行一个git stash的命令就可以把当前修改的内容保存起来,不再影响开发其他的功能。当我们开发完其他功能的时候,在切换会主线任务时,只需要执行下git stash pop就可以了。
git stash的存储结构时栈的结构,我们可以一直stash,出来的时候也是一样,一直pop就可以,每次pop就会出来一个stash。但是小编不建议大家放多个stash,因为时间久了你就分不清楚了,而且一般情况下,老的stash就没有意义了。
下面咱再说集个关于stash常用的方法吧。

  • git stash:保存当前工作进度,会把暂存区和工作区的改动stash(保存)起来。执行完这个命令后,在运行git status命令,就会发现当前是一个干净的工作区,没有任何改动。使用git stash save '注释'可以添加一些注释。
  • git stash list显示保存进度的列表,也就是你所有的stash。
  • git stash pop [–index] [stash_id]: git默认会把工作区和暂存区的改动都恢复到工作区,通过git stash pop命令恢复进度后,会删除当前进度。

    • git stash pop 把最近一次的stash恢复最新的进度到工作区。
    • git stash pop --index 恢复最新的进度到工作区和暂存区,尝试将原来暂存区的改动还恢复到暂存区。
    • git stash pop [stash_id] 恢复指定的进度到工作区。stash_id是通过git stash list命令得到的。例如:stash@{1}
  • git stash apply [–index] [stash_id]` 除了不删除恢复的进度之外,其余和git stash pop 命令一样。
  • git stash drop [stash_id]删除一个存储的进度。如果不指定stash_id,则默认删除最新的存储进度。
  • git stash clear 删除所有存储的进度,如果你忘记了存储进度上午内容,建议直接clear,但是一定要慎重。

创建分支

  • 直接创建
    git branch dev(分支名)
  • 基于某个历史版本创建分支
    git branch dev(分支名) HEAD(历史版本)

    查看分支

  • 查看本地所有分支
    git branch
  • 查看远程以及本地的所有分支
    git branch -av 红色部分代表远端分支

    删除分支

    git branch -d dev(分支名)

    切换分支

    git checkout dev

    查看分支差异

  • 查看分支差异
    git diff dev master
  • 查看分支指定文件差异
    git diff dev master -- index

    合并分支

    合并之前先执行:git pull --rebase
    git merge --no-ff -m "备注"dev

拉取远程分支

  • 拉取远程分支,默认拉取主分支
    git clone (git地址)
  • 拉取远程指定分支
    git clone -b dev (git地址)t
  • 拉取主分支后,基于远端指定分支本次创建新分支
    git checkout -b dev origin/dev 基于远端的dev分支本次创建dev分支

  1. 首先介绍一个mac上非常好用的命令行工具:iterm2.这个对后续的操作没有影响,只是小编用的比较舒心。哈哈哈哈。
  2. 在你的~文件夹下建立一个.bashrc文件,并且保存一下文件。可以使用 vi .bashrc进行操作,把以下内容复制到你新建的这个文件中。

    function git_branch {
    branch="`git branch 2>/dev/null | grep "^\*" | sed -e "s/^\*\ //"`"
    if [ "${branch}" != "" ];then
        if [ "${branch}" = "(no branch)" ];then
            branch="(`git rev-parse --short HEAD`...)"
        fi
        echo " ($branch)"
    fi
    }
    
    export PS1='\u@\h \[\033[01;36m\]\W\[\033[01;32m\]$(git_branch)\[\033[00m\] \$ '

    如果你不会使用vi编辑器,可以查看小编的其他文章哦。

  3. 保存之后执行:source ~/.bashrc
  4. 如果你是mac的话,在执行下:echo "[ -r ~/.bashrc ] && source ~/.bashrc" >> .bash_profile
    然后你就大功告成了(如果没权限的话,切换到你的root用户去操作).

git更换远程仓库

u=1297849412,795774049&fm=26&gp=0.jpg

  1. 从原地址克隆一份裸版本库

    git clone --bare  迁移之前的地址
  2. 在新的服务器建立一个新的仓库,主要不要勾选Initialize repository with a README。
  3. 删除现在的地址,换成新仓库的地址

     git remote set-url --push origin 新的仓库地址
  4. 以镜像推送的方式上传到新的仓库

    git push --mirror 

  1. 首先通过git commit --amend这个命令打开最近一次提交的信息,第一行就是你的注释,通过vim编辑器进行编辑,编辑之后保存就可以了。
  2. 通过git push --force sunxiaoning sunxiaoning强行推送到你的代码库。