Skip to content

Latest commit

 

History

History
483 lines (297 loc) · 10 KB

Git_Command.md

File metadata and controls

483 lines (297 loc) · 10 KB

Git Command

git clone 默认是克隆Head指向的master分支,如果是多分支,我们可以单个克隆分支项目。

1.只克隆单分支(非master):

git clone -b 分支名 https://xxx.git

2.克隆所有分支(多分支)

cd project //切换到指定目录 git clone https://xxx.git //克隆项目(默认master分支)

​ git branch -a //列出远程跟踪及本地分支

1.安装并设置地址

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

2.创建版本库

$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit

$ git init

3.版本管理

  • 添加文件

$ git add readme.txt
$ git commit -m "wrote a readme file"
  • 查看工作区状态

$ git status
  • 查看提交日志

$ git log
  • 查看历史命令

$ git reflog
  • 版本间穿梭

$ git reset --hard commit_id

expmple:

​ git reset --hard HEAD^

​ git reset --hard 1094a

  • 撤销修改

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,或者删除了工作区某个文件,用命令

$ git checkout -- <file>

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步

$ git reset HEAD <file>
$ git checkout -- <file>

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本间穿梭一节,不过前提是没有推送到远程库。

  • 删除文件

$ git rm <file>
$ git commit -m "remove test.txt"

4.远程仓库

  • 第1步:

创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

$ ssh-keygen -t rsa -C "[email protected]"
  • 第2步:

登陆GitHub,打开“Account settings”,“SSH Keys”页面。然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容

  • 第3步:

登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库

  • 第4步:

根据GitHub的提示,在本地的learngit仓库下运行命令(请千万注意,把上面的michaelliao替换成你自己的GitHub账户名):

$ git remote add origin [email protected]:michaelliao/learngit.git

上传远程库

  • 第5步:

就可以把本地库的所有内容推送到远程库上(添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库):

$ git push -u origin master
Counting objects: 20, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (20/20), 1.64 KiB | 560.00 KiB/s, done.
Total 20 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), done.
To github.com:michaelliao/learngit.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令:

$ git push origin master

删除远程库

如果添加的时候地址写错了,或者就是想删除远程库,可以用git remote rm <name>命令。使用前,建议先用git remote -v查看远程库信息:

$ git remote -v
origin  [email protected]:michaelliao/learn-git.git (fetch)
origin  [email protected]:michaelliao/learn-git.git (push)

然后,根据名字删除,比如删除origin

$ git remote rm origin

此处的“删除”其实是解除了本地和远程的绑定关系,并不是物理上删除了远程库。远程库本身并没有任何改动。要真正删除远程库,需要登录到GitHub,在后台页面找到删除按钮再删除。

5.分支管理

查看分支

git branch

创建分支

git branch <name>

切换分支

git checkout <name> 
or
git switch <name>

创建+切换分支

git checkout -b <name>
or
git switch -c <name>

合并某分支到当前分支

git merge <name>

删除分支

git branch -d <name>

可以通过git branch -D <name>强行删除

用带参数的git log也可以看到分支的合并情况

git log --graph --pretty=oneline --abbrev-commit

6.多人协作

查看远程库信息

git remote -v

本地新建的分支如果不推送到远程,对其他人就是不可见的;

从本地推送分支

git push origin branch-name

如果推送失败,先用git pull抓取远程的新提交

在本地创建和远程分支对应的分支

git checkout -b branch-name origin/branch-name

本地和远程分支的名称最好一致

建立本地分支和远程分支的关联

git branch --set-upstream-to <branch-name> origin/<branch-name>

多人协作的工作模式

  1. 首先,可以试图用git push origin <branch-name>推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
  3. 如果合并有冲突,则解决冲突,并在本地提交;
  4. 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>

7.标签管理

创建标签

$ git tag <tagname>

默认标签是打在最新提交的commit上的,也可以指定一个commit id

$ git tag v0.9 f52c633

创建带有说明的标签

-a指定标签名,-m指定说明文字

$ git tag -a v0.1 -m "version 0.1 released" 1094adb

查看所有标签

$ git tag
v1.0

查看标签信息

标签不是按时间顺序列出,而是按字母排序的。git show <tagname>

$ git show v0.9
commit f52c63349bc3c1593499807e5c8e972b82c8f286 (tag: v0.9)
Author: Michael Liao <[email protected]>
Date:   Fri May 18 21:56:54 2018 +0800

    add merge

diff --git a/readme.txt b/readme.txt
...

删除标签

$ git tag -d <tagname>

推送标签到远程

$ git push origin <tagname>

一次性推送全部尚未推送到远程的本地标签

$ git push origin --tags

删除远程标签

$ git tag -d <tagname>															 //删除一个本地标签
$ git push origin :refs/tags/<tagname>							//删除一个远程标签

8.配置代理

查看全局配置

$ git config --global -l

配置代理

$ git config --global http.proxy 127.0.0.1:7890

取消代理

$ git config --global --unset http.proxy

8.其他命令

git stash

(1)使用场景:

当我们在某一条分支上开发新功能时,突然有个紧急的错误需要修复

这时,我们不得不暂停手头上的工作,切换到另外的分支去修复错误

但是,新功能做到一半,既不能提交,也不能删除,那该怎么办呢

我们可以先把当前的更改保存起来,等处理完错误后再恢复出来,git stash 就是这样的一个用法

它可以将工作区和缓存区的更改保存到一个栈结构中,等后面需要的时候再恢复

(2)基本用法

保存:git stash
> # 将当前工作区和暂存区的更改保存到一个栈结构
$ git stash
> # 将当前工作区和暂存区的更改保存到一个栈结构,并附带一个信息
$ git stash save "message"
$ # 将当前工作区和暂存区的更改保存到一个栈结构,包括新增的文件
$ git stash -u
$ git stash --include-untracked
> # 将当前工作区和暂存区的更改保存到一个栈结构,包括新增的文件以及忽略的文件
$ git stash -a
$ git stash --all
查看栈中保存的更改:git stash list
> # 查看栈中保存的更改
$ git stash list
查看更改的具体内容:git stash show
> # 查看栈中第一个更改的具体内容
$ git stash show
> # 查看栈中指定的更改的具体内容
$ git stash show <stash id>
恢复:git stash apply
> # 将栈中的第一个更改恢复到当前工作区和暂存区
$ git stash apply
> # 将栈中的指定的更改恢复到当前工作区和暂存区
$ git stash apply <stash id>
删除:git stash drop
> # 删除栈中的第一个更改
$ git stash drop
> # 删除栈中的指定的更改
$ git stash drop <stash id>
恢复 & 删除:git stash pop
> # 将栈中的第一个更改恢复到当前工作区和暂存区,同时删除栈中的第一个更改
$ git stash pop
> # 将栈中的指定的更改恢复到当前工作区和暂存区,同时删除栈中的指定的更改
$ git stash pop <stash id>
清空:git stash clear
> # 清空栈中保存的更改
$ git stash clear