git 爬坑小结

git 做为一个当下最流行的版本控制工具,不会git都很差意思(吹)聊(牛)天,可是做为一个刚接触不久的小编,在使用过程当中,仍是遇到一些头疼的地方,因此开个帖,记录下在学习和使用git的过程当中的笔记和一些小技巧。(大佬勿喷~)git

经常使用命令

咱们平常使用最多的命令应该就是这些了,也基本上知足大部分工做流浏览器

  • git init 建立版本库,会在当前根目录生成 .git文件夹,当前项目的git相关配置都在这个文件夹下
  • git clone 你是我?对,你就是我
  • git add [<options>] 将有变动的文件添加到暂存区,能够指定文件或者所有添加 git add .
  • git status 顾名思义啦,查看当前项目状态,是否是有修改,暂存区是否是有待提交文件等
  • git commit -m "message" 将暂存区的文件提交到当前分支中,message 不能够为空,一个好的message但是很是重要的,毕竟哪一个开发狗手里没个板砖
  • git remote add <name> <url> 当咱们本地的代码须要上传到服务器时,就须要新增个远端服务的地址,name指定一个名称,该名称在后续的操做很是有用的,url 远程仓库的地址
  • git push <remote-name> <branch> 这个命令能够理解为,将本地的修改推送到远端仓库里,remote-name 就是咱们在 git remote add 设定的名字,branch 指定推送上去的分支
  • git pull <remote-name> <branch> 功能与上一个相反,将远端的代码更新到本地,<remote-name> <branch>就很少解释了哈
  • git checkout -b <branch> [<remote-name>/<branch>] 建立分支,有两种情景,一 在当前分支的基础上建立的新分支,那么使用这个 git checkout -b <branch> 或者 git branch <branch> ,在hot fix 的时候就很是适用;二 想从远端拉取个新的功能分支,那么来发这个 git checkout -b <branch> <remote-name>/<branch> 指定远端和具体分支,适合多分支同时开发的场景
  • git checkout <branch> 切换分支
  • git branch [--list] 查看分支列表
  • git branch -d <branch> 删除分支,say goodbye
  • git fetch <remote-name> 将本地库所关联的远程库的commit id更新至最新,若是你们使用 git pull 来更新代码,那基本上不会使用该命令,不过在当咱们不想更新远程仓库,却又想查看远程仓库的最新提交历史的时候,这就派上用场啦

更新本地仓库

一般有两种方式服务器

  1. git pull <remote-name> <branch> 从远程获取最新版本并merge到本地,至关因而 git fetchgit merge 一并执行了
  2. 先使用 git fetch <remote-name> 更新状态;
    git rebase <remote-name>/<branch> 或者 git merge <remote-name>/<branch> 更新代码,我的推荐 rebase

解决冲突

对小白来讲,最可怕的莫过于,代码撸完了,一提交,卧槽!有冲突!
好吧,冲突其实并(非)不(常)可怕。
冲突建议在本地进行解决,不建议在网页上操做,由于会默认双向合并,亲自测出来的app

  1. 使用 git pull 方式更新的代码,那么分别将冲突的文件逐一修改,完成后,git add <conflict file> git commit -m "merge conflict" 这种方式会产生一次额外的 commit
  2. 使用先 fetchrebase 的方式更新代码,根据提示,解决后,git add <conflict file>,注意此时不须要 git commit ! 只须要 git rebase --continue 便可,这中方式不会生成新的 commit记录,使得咱们的提交记录干净一些,且合并到一半,心情很差,咱们还能够 git rebase --abort 取消本次合并,下(吃)班(饭)再说

撤销修改

谁没写过bug的时候,但被眼光犀利的咱们发现了,咱们用以下操做将其roll-back。有如下三种场景工具

修改尚未加入暂存区

尚未执行 git add学习

git checkout -- <file> 该文件的修改,将被啪叽打回最初状态,不过如果某一处地方须要还原,这个操做就不适合了,手动修改便可fetch

修改还在暂存区

已经git add , 但未 git commit 提交url

git reset HEAD <file>... 将文件从暂存区撤销掉版本控制

修改已经提交到分支上

头脑混乱的小编,已经把bug commit 上去了(写bug咱们历来不含糊),若是是这个bug涉及的代码量很是多,须要彻底从新写过那种,那能够经过回滚的方式
git reset --hard HEAD~ 回退到上一个版本 ,或者回滚到指定的版本号code

文件名大小写

某个已经提交的文件,想要修改文件名称的大小写,啪叽,改完,发现git没检查出有变动,心理mmp,莫慌,git 默认对于文件名大小写是不敏感的,因此git认为当前代码无任何改动,那么如何才能让 git 识别文件名大小写变化呢
有两种方式

  1. 修改配置文件 git config core.ignorecase false 设置为大小写敏感,但听说设置后会有奇奇怪怪的小问题,我还没试过,你们能够尝试看看哈~
  2. git mv <old-file> <new-file> 取巧的方式,但肥肠好用

.gitignore

顾名思义,指定文件或目录,git将其视为空气。

有个情景,若某个已经版本管理中的文件,想不要归入版本管理中,可以下操做

  1. .gitignore中添加规则
  2. git rm [-f] <filename> 将文件从版本控制中删除,同时本地文件也会被物理删除

    git rm --cached <filename> 仅从版本库中删除,本地文件仍然保留

  3. git commit -m "remove file from git"

提交空文件夹

git会无视咱们的空文件夹,但当咱们又不得不提交的时候,咱们能够建立个对项目无影响的文件,如 .gitkeep 名字你们随意便可

设置别名

若是你使用的是可视化工具,那当我没说~

早上 git xxx,下午git xxx ,时间久了,大伙必定发现,经常使用的那些命令天天都要敲个几百遍,肌肉都有记忆了,敲快一点,还不当心敲错了。放心,咱们能够设置别名,让你们少敲几个单词啦

git config --global alias.<alias-name> <name> 告诉git,之后 alias-name 就是 name
如下是我设置的别名列表

git config --global alias.co checkout
git config --global alias.cm commit
git config --global alias.br branch
git config --global alias.fu 'fetch upstream'
git config --global alias.po 'push origin'
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

你们根据本身的习惯折腾就好啦,--global指的是全局设置,若想查看配置信息, cd ~ ; cat .gitconfig 便可查看

可视化工具

这方面的工具,市面上一大把了,好比

[Git GUI] gitk 便可打开,一个很是淳朴的GUI

sourcetree

tortoisegit

SmartGit

小编用过sourcetree,感受还不错,很是直观,我的不推荐小白入门使用图形化工具,万一不当心点错了,真不知道该如何处理~ (来自一个制账加手残的小编的舒适提醒)

-----------------------我是分割线--------------------------

子模块

git -help

git <command> <-help | -h > 能够查看命令的参数和简要介绍
git <command> --help 经过浏览器打开该命令的详细介绍

小编还会持续更新的~

相关文章
相关标签/搜索