git常用操作总结

配置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 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