配置git
根据unix系统的特点,按照作用域范围大小(由小到大)我们可以在三个地方来配置git
-
$GIT_DIR/config Repository specific configuration file.
-
~/.gitconfig User-specific configuration file.(All also called “global configuration file”)
-
$prefix/etc/gitconfig System-wide configuration file.
~/.gitconfig 是最常用的。对应的配置命令要加 –global 选项。
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
覆盖作者名
git commit --author="Ben <ben@ben.com>" -a -m"ben's msg"
基本用法
上面的四条命令在工作目录、暂存目录(也叫做索引)和仓库之间复制文件。
git add files 把当前文件放入暂存区域。
git commit 给暂存区域生成快照并提交。
git reset -- files 用来撤销最后一次git add files,你也可以用git reset 撤销所有暂存区域文件。
git checkout -- files 把文件从暂存区域复制到工作目录,用来丢弃本地修改。
命令详解
Diff
有许多种方法查看两次提交之间的变动。下面是一些示例。
git常用操作
git clone
指定仓库的名字
git clone https://github.com/hayeah/sikeio-buyshoes-startkit.git sikeio-buyshoes-react
git log
用git log
可以查看提交历史,以便确定要回退到哪个版本 。简写版git log —pretty=oneline
git reflog
用git reflog
查看命令历史,以便确定要回到未来的哪个版本
版本回退
git reset —hard HEAD^
回退到上一个版本(这里的版本指的是commit到仓库的版本)
管理修改
用 git add 把文件修改添加到暂存区;
用 git commit 把暂存区的所有内容提交到当前分支。
撤销修改
-
当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file
-
当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
-
已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
删除文件
当你从本地删除了一个文件,如果是确实要从版本库中删除该文件,那就用命令git rm filename
删掉,并且git commit
;另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:git checkout — filename
git checkout
其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
分支创建
git branch 分支名
分支切换
git checkout 分支名
git checkout 命令加上-b参数表示创建并切换分支
git checkout -b 分支名
分支合并
先切换回需要合并代码的主分支上(通常是master),然后执行
git merge 分支名
删除分支
git branch -d 分支名
你可以使用带 -d 选项的 git branch 命令来删除分支
git remote
为了便于管理,Git要求每个远程主机都必须指定一个主机名。git remote命令就用于管理主机名。 不带选项的时候,git remote命令列出所有远程主机。
$ git remote
origin
使用-v选项,可以参看远程主机的网址。
$ git remote -v
origin git@github.com:jquery/jquery.git (fetch)
origin git@github.com:jquery/jquery.git (push)
git remote show
命令加上主机名,可以查看该主机的详细信息。
$ git remote show <主机名>
git remote add
命令用于添加远程主机。
$ git remote add <主机名> <网址>
git remote rm
命令用于删除远程主机。
$ git remote rm <主机名>
git remote rename
命令用于远程主机的改名。
$ git remote rename <原主机名> <新主机名>
重命名完仓库需要更新一下远程仓库的地址,使用这个命令:
git remote set-url origin https://github.com/USERNAME/OTHERREPOSITORY.git
git fetch
一旦远程主机的版本库有了更新(Git术语叫做commit),需要将这些更新取回本地,这时就要用到git fetch命令。
$ git fetch <远程主机名>
上面命令将某个远程主机的更新,全部取回本地。
git fetch
命令通常用来查看其他人的进程,因为它取回的代码对你本地的开发代码没有影响。
默认情况下,git fetch
取回所有分支(branch)的更新。如果只想取回特定分支的更新,可以指定分支名。
$ git fetch <远程主机名> <分支名>
比如,取回origin主机的master分支。
$ git fetch origin master
所取回的更新,在本地主机上要用”远程主机名/分支名”的形式读取。比如origin
主机的master
,就要用origin/master
读取。
git branch
命令的-r
选项,可以用来查看远程分支,-a
选项查看所有分支。
$ git branch -r
origin/master
$ git branch -a
* master
remotes/origin/master
上面命令表示,本地主机的当前分支是master,远程分支是origin/master。
git pull
git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。它的完整格式稍稍有点复杂。
$ git pull <远程主机名> <远程分支名>:<本地分支名>
比如,取回origin主机的next分支,与本地的master分支合并,需要写成下面这样。
$ git pull origin next:master
如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
$ git pull origin next
上面命令表示,取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch,再做git merge。
$ git fetch origin
$ git merge origin/next
如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名。
$ git pull origin
上面命令表示,本地的当前分支自动与对应的origin主机”追踪分支”(remote-tracking branch)进行合并。 如果当前分支只有一个追踪分支,连远程主机名都可以省略。
$ git pull
上面命令表示,当前分支自动与唯一一个追踪分支进行合并。
如果合并需要采用rebase模式,可以使用–rebase选项。
$ git pull --rebase <远程主机名> <远程分支名>:<本地分支名>
如果远程主机删除了某个分支,默认情况下,git pull
不会在拉取远程分支的时候,删除对应的本地分支。这是为了防止,由于其他人操作了远程主机,导致git pull
不知不觉删除了本地分支。但是,你可以改变这个行为,加上参数 -p
就会在本地删除远程已经删除的分支。
修改远程仓库地址
git remote set-url origin https://github.com/USERNAME/OTHERREPOSITORY.git
gitignore 资源
curl https://www.gitignore.io/api/node > .gitignore
遇到的问题
忘了写gitignore,不小心把node_modules下的文件也add 打了暂存区,但还没有commit如何取消git add -A
git reset
参考文档Undo ‘git add’ before commit
Clone a specific Git branch
git clone -b <branch> <remote_repo>
git clone -b my-branch https://git@github.com/username/myproject.git