熟悉git的基本用法

来源:互联网 发布:led 知乎 编辑:程序博客网 时间:2024/05/21 08:47

Git

Git 创建版本库

首先创建一个目录 mygit并进入,然后创建一个仓库。

创建一个仓库:git init

该命令会在目录下生成一个 .git 目录,该目录是隐藏的,使用 ls -ah 查看


Git添加文件到仓库

把一个文件放到仓库需要2

git add fileName.xxx

git commit -m “本次提交说明”

查看仓库状态 git status

本地和仓库是一致的显示working directory clean

修改了mygit.txt文件后

添加到缓存区 git add之后

使用git diff 文件名查看文件的不同


使用 git difftool 查看文件的不同,会调用出比对工具

Git 版本回退

Git 一个commit就是一个快照,一旦出了问题可以进行回退。

显示提交记录 git log,可以看到刚才的提交记录

如果嫌信息太多,可以显示简要信息 git log --pretty=online

把当前版本回退到上一个版本为 git reset --hard HEAD^

如果想再回到未来的版本,窗口没有关闭的情况下,可以找到那个版本的id号,然后就可以回去 git reset --hard id

如果电脑关闭了,想恢复到新版本,找不到 新版本的commit id

Git提供一个命令可以用于记录你的每一次命令 git reflog  就可以在这找到新版本的commit id

工作区和暂存区

初始化一个git仓库时,git为我们自动创建第一个master分支,以及指向这个master分支的指针HEAD

Stage表示暂存区

Git通过git add命令把文件从工作区添加到暂存区。

Git 通过 git commit提交更改,是把暂存区的内容提交到当前分支。

查看工作区文件和最新版本库的区别 git diff HEAD -- 文件名(工作区)

撤销工作区的修改  git checkout -- fileName.xxx  可以把工作区的修改全部撤销

这里撤销修改分为两种,

一种是工作区修改了,直接git checkout -- fileName.xxx回到和版本库一致。

另一种是已添加到暂存区又做了修改,撤销就回到了添加到暂存区的状态。

撤销暂存区的修改: git reset HEAD fileName.xxx 回到了工作区修改状态。

如果从暂存区提交到了版本库,可以使用 git reset id回退。如果推送到了远程就没有办法了。

删除一个文件  git rm fileNmae.xxx

恢复删除的文件  git reset HEAD filename.xxx          git checkout  --  filename.xxx

创建远程仓库(这里注册一个gitHub账号)

①首先创建一个repositories名字为mygit

②关联本地仓库和远程仓库,在根目录下执行,这里需要把CoderMengLi换成你自己的gitHub用户名。

git remote add origin git@github.com:CoderMengLi/gittest.git

③把本地库推送到远程

Git push -u origin master

由于远程仓库是空的,第一次推送master分支时,加上了-u参数,git不但会把本地master分支内容推送到远程分支,还会把本地master分支和远程的master分支关联起来。

现在只要本地做了修改,就可以通过命令

Git push origin  master 提交


克隆代码

可以使用 SSH HTTP两种方式克隆代码。

Git clone  git@github.com:CoderMengLi/mygit.git

Git clone https://github.com/CoderMengLi/mygit.git

Git默认的是使用ssh,使用https除了慢以外,最大的麻烦是每次都必须输入口令。

分支管理

Git中的主分支叫master分支,master指针指向提交,HEAD指针是指向当前分支。

当我们创建新的分支,如dev时,git新建了一个指针叫dev,指向和master相同的提交,再把HEAD指向dev,表示当前分支在dev


从现在开始对工作区的修改和提交就是针对dev分支进行,如新提交一次后,dev指针往前移动一步,而master指针不变。

当dev上的工作完成了,就可以把dev合并到master,合并就是把master指向dev的当前提交,就完成了合并。

合并分支  git merge 指定分支  把指定分支合并到当前分支。

合并完成后,删除dev分支,就是删除这个指针git branch -d  分支名

Git checkout  -b 分支名   相当于下面两条命令

Git branch 分支名

Git checkout 分支名

 

解决冲突

两个分支合并时可能会产生冲突,比如两个分支都修改了同一个文件,则需要手动解决冲突,然后再次提交。

查看分支合并情况 git log --graph --pretty=oneline --abbrev-commit

查看提交  git log --pretty=oneline --abbrev-commit

合并分支时,git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息,如果要强制禁用Fast forward模式,git就会在merge时生成一个新的commit,这样从分支历史上就能看到这条分支信息。

git merge --no-ff -m "merge with no-ff" 分支名

因为这次合并要创建一个新的提交,所以加上-m参数,输入提交信息。

不用Fast forward的示意图是这样的

使用Fast Forward合并策略是这样的

禁用 Fast Forward后的分支合并情况

Bug分支

每个bug可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。

如果你新建了一个bug分支,issue修复bug,但是现在在dev上的工作还没有提交,可以使用git stash缓存工作现场。

查看缓存情况  git stash list

弹出缓存 git stash pop stash@{0}

这里这个分支如果不提交就无法切换分支,所以必须使用git stash 保存状态,再创建bug分支去更改提交。

如果使用git stash apply 恢复,恢复后stash里的内容还没有删除,需要使用git stash drop来删除。

查看远程库信息 ,使用 git remote 

查看远程库信息,使用git remote -v

设置本地分支和远程分支对应git branch --set-upstream dev remotes/origin/dev

标签管理

发布一个版本时,通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。

打标签  git tag v1.0

可以在指定提交id处打标签git tag v1.1  id

显示tag信息  git show tag

显示所有tag   git  tag

创建带有说明的标签 git tag -a v1.2 -m “version1.2”  id

如果标签打错了,也可以删除标签 git tag -d tag

把标签推送到远程  git push origin v1.0

一次性推送 git push origin --tags

删除远程标签

① 先删除本地 git tag -d v0.1

② 再删除远程,删除语句是push  git push origin :refs/tags/v0.1

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      

SecureCRT上颜色的设置有利于git status查看

有时我们在操作git时候,比如我们 运用git branch查看分支的时候,或者是运用git diff查看修改变化差异时候,git status查看状态时 我们看到的效果全部都是同一个颜色,不得于我们查看文件。

 如果当我们在 ~user/.gitconfig下面添加如下配置:

      [color]

               branch = auto          针对于git branch显示的结果

               status = auto            针对于git status显示的结果

               diff = auto                 针对于git diff显示的结果

           log = auto            针对于git log 显示的结果

 通过以上设置,我们的git命令得到的结果就比较利于查看了

等价于

git config --global color.diff auto //git diff要显示的颜色

git config --global color.status auto //git status 要显示的颜色

git config --global color.branch auto //git branch 要显示的颜色

git config --global color.log auto //git log 要显示的颜色

 

一条最简单的命令就是

git config --global color.ui true

 

查看git设置

git config --list

如果查看global的设置,用下面的命令:

git config --global --list

  

删除设置

我们可以直接编辑文件,也可以用类似下面的命令

git config--unset --global user.name

 

SecureCRT上颜色的设置步骤如下:

Options-->Session Options-->Terminal-->Emulation

Terminal:Xterm  ANSI Color Use color scheme选中

之后,git log  git status  git  log   git  diff

颜色就有变化

0 0