Git常用命令

      Git 是一个版本管理工具,和 SVN 不同的是,SVN 是集中式的版本控制系统,Git 是分布式版本控制系统。这篇文章主要是简单总结下 Git 和一些常用的 git 命令。

Git

Git 的区域

1.工作区(working tree)
2.暂存区(stage)
3.版本库(repository)

Git 文件的四种转态

1.Untracked(未被跟踪)

此文件在文件夹中,还没有加入到 git 库,不参与版本控制。通过 git add 状态变为 暂存状态
2.Modified

表示工作区修改了某个文件,但是还没有添加到暂存区
3.Staged

表示工作区修改的文件添加到了暂存区但是还没有添加到版本库
4.committed

表示数据被安全的存在本地库中

常用命令

基础命令

初始化本地仓库

1
git init

查看工作区、暂存区的状态

1
git status

将工作区新建/修改的内容添加到暂存区

1
git add <file>

将暂存区的内容提交到本地库

1
git commit -m "备注"

查看历史记录

1
git log

新增、更改 Git 的各种设置

1
2
3
4
git config
//例如配置系统级别签名
git config --global user.name "<username>"
git config --global user.email "<eamil>"

删除某个文件

1
git rm --cached <file>;

上传到远程仓库

1
2
3
4
//增加一个名称为origin远程仓库
git remote add origin <address>
//推送远程仓库
git push -f origin master

克隆到本地

1
git clone <address>

撤销操作

撤销上一次的提交,并将暂存区的文件重新提交,如果没有修改信息的话,就只是提交描述信息

1
git commit —amend

拉取暂存区文件 并将其替换成工作区文件

1
git checkout -- <file>

拉取最近一次提交到版本库的文件到暂存区,该操作不影响工作区

1
2
//HEAD也可以直接换成版本号
git rest HEAD <file>

以上两条操作会导致:暂存区和本地文件不一样,暂存区和版本库不一样。
需要使git checkout –[file]命令来把 暂存区文件拉到工作区再将暂存区的文件拉回到工作区中。

分支操作

      创建分支的好处是不会影响当前主线的文件。 比如再已上线的代码中新增需求时,在我们自己的分支中操作不会影响主线的项目。

查看当前分支

1
git branch

创建分支

1
2
//注意新分支创建后不会自动切换为当前分支
git branch <name>

创建新分支并立即切换到新分支

1
git checkout -b <name>

删除分支

1
2
//d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用-D选项
git branch -d [name]

切换分支

1
git checkout <name>

切换主线

1
git checkout master

提交分支到远程仓库

1
git push -u origin <name>

删除远程分支

1
git push -u origin --delete <name>

Git 指针


git指针

      上面这张图能够更快的帮我们理解git指针。版本号1,2,5为master主线,版本号3,4为dev分支。首先,当我们提交了一个版本的时候,就会有一个版本号,就有两个指针指向我们的版本。一个是master分支,一个是HEAD指针,指向当前分支的最后一个版本。当我们修改文件,再次提交后,会有一个新的版本号,同时,我们的分支和HEAD指针也会指向我们最后一次提交。最新版本中也有一个指针指向前一个版本。指针是我们文件中有一块地方保存其他模块的地址。当我们调用其他模块的时候,可以通过这个模块找到其他模块的地址。从而调用其他模块,达到方便访问其他模块的目的。master分支保存了M2版本的地址。同样的再提交一个版本,master指针和HEAD指针都会向前移。当我们再这里新建了一个分支时,比如dev分支。master分支仍会指向版本号二。新建的这个分支会指向版本号三,而HEAD指针从版本号2移到了版本号3.只有当从master分支的版本号2切换到dev 分支的版本号3的时候,HEAD指针会从版本号2移到版本号3。HEAD指针永远指向当前分支的最新版本。当提交到版本号4后,dev分支会和HEAD同时指向最新版本。当这个时候想合并我们的dev分支和master分支时。形成了版本号5分支,版本号5即指向我们的版本号2,又指向版本号4,也就是说他能很快速的访问版本号2,也可以很快速的访问版本号4。分支的指针仅仅保存的是地址。当我们切换版本时,当我们从一个版本回退到另一个版本的时候,分支的指针是直接将他们的地址进行更改。从我们的版本号5的地址换成了版本号2的地址。所以git版本的回退特别快。切换分支时,git是通过判断HEAD是不是指向当前版本。

合并分支及冲突解决

合并分支

1
git merge <name>

冲突解决

在使用 Git 进行多人合作的时候 我们时常会出现冲突。比如我们在分支 A 修改了 index.html 文件并提交到了分支 A 的版本库,同时 master 分支也修改了该文件。即主分支和我们要合并的分支都发生了修改 这时系统就不知道我们要保留哪一个文件 就会发生冲突

1
CONFLICT(content):Merge conflict in index.html

修改冲突文件:我们发现系统把 Master 和 A 分支的内容都列出来了。这时我们想保留那个就把另一个删除即可。然后再添加并提交,就可以合并成功啦。

1
2
3
4
5
<<<<<<< HEAD
<p>Hello world!</p>
=======
<p>Hello world2!</p>
>>>>>>> A

版本差异比较

比较工作区和暂存区文件的差异

1
git diff

比较暂存区和版本库之间的差异

1
git diff — staged

比较两个版本之间的差异

1
2
//版本号最少选4个,git默认是7个,最好选8-10个,这样能保证唯一性
git diff <version> <version>

两个分支之间的差异

1
git diff <branch> <branch>

存储变更

      上切换分支前,需要把当前分支的修改提交,或者放到暂存区中,否则会报错。

解决:将工作区修改的内容暂存起来,并自动切换到修改前的工作区状态

1
git stash

      暂存后,再切换分支就不会报错了。git 在进行分支切换时,它主要改变我们的版本库。当工作区有改变时,会将我们工作区的文件直接覆盖到另外一个分支上去,从而影响另外一个分支。所以使用 git stash 时,将工作区和暂存区的东西封存。git 也会自动将工作区的改变变回改变前的转态

查看保存内容列表

1
git stash  list

git stash list 后看到暂存区的东西

1
2
stash@{0}: WIP on master: 452b08d rename hello as hello.c
stash@{1}: WIP on master: 452b08d rename hello as hello.c

将暂存区的东西拉回工作区

1
git stash apply stash@{x}

将暂存区的东西删除

1
git stash drop stash@{x}

将暂存区的东西拉回工作区并删除

1
git stash apply stash@{x}

忽略不想上传的文件

将忽略的文件名/文件夹名放在.gitignore
.gitignore

1
2
3
node_modules/
/dist/
npm-debug.log

Copyright ©2019 guowj All Rights Reserved.

访客数 : | 访问量 :