Git命令汇总学习

阅读: 评论:0

Git命令汇总学习

Git命令汇总学习

参考:

文章目录

  • 一、Git环境
    • 1、安装git
    • 2、创建仓库并 git init 初始化仓库
    • 3、git add 添加文件到本地仓库
    • 4、git commit 提交文件到本地仓库
    • 5、小结
  • 二、时光机穿梭
    • 1、git status 命令可以看仓库当前的状态
    • 2、git diff 可以查看修改内容
    • 3、git log 查看历史记录
    • 4、git reset --hard commit_id 版本穿梭
    • 5、git checkout -- 撤销修改
    • 6、git reset HEAD 把暂存区的修改回退到工作区
    • 7、git rm 删除文件
  • 三、远程仓库
    • 1、git remote add origin 关联仓库
    • 2、git push -u origin master 把当前分支master推送到远程
    • 3、git remote -v 查看远程库信息
    • 4、git remote rm 删除远程仓库
    • 5、小结
    • 6、git clone 命令克隆仓库
  • 四、分支管理
    • 1、git switch -c dev 创建并切换dev分支
    • 2、git branch 命令查看当前分支
    • 3、git merge 命令用于合并指定分支到当前分支
    • 4、git branch -d dev 删除dev分支
    • 5、小结
    • 6、git log --graph 命令可以看到分支合并图
    • 7、git merge --no-ff -m "merge with no-ff" dev 合并分支
    • 8、git stash 把当前工作现场“储藏”起来
    • 9、git stash pop 恢复内容的同时把stash内容也删了
    • 10、git stash list 查看存储内容
    • 11、cherry-pick 复制一个特定的提交到当前分支
    • 12、小结
    • 13、feature分支 开发功能
    • 14、git remote 查看远程库的信息
    • 15、小结
    • 16、git rebase 把分叉的提交变成直线
  • 五、标签管理
    • 1、git tag 就可以打一个新标签
    • 2、git tag 查看所有标签
    • 3、git show 查看标签信息
    • 4、git tag小结
    • 5、git tag -d v0.1 删除标签
    • 6、git push origin 推送某个标签到远程
    • 7、标签已经推送到远程,要删除远程标签
    • 8、小结
  • 六、既关联GitHub,又关联Gitee

一、Git环境

1、安装git

在Windows上使用Git,可以从Git官网直接下载安装程序,然后按默认选项安装即可。

官网:

安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

安装完成后,还需要最后一步设置,在命令行输入:

git config --global user.name "Your Name"
git config --ail "email@example"

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。

注意:git config命令的 --global 参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

2、创建仓库并 git init 初始化仓库

第一步,选择一个合适的地方,创建一个空目录:

mkdir learngit
cd learngit
pwd

pwd命令用于显示当前目录

第二步,通过git init命令把这个目录变成Git可以管理的仓库:

git init

如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。

3、git add 添加文件到本地仓库

$ git 

执行上面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功。

4、git commit 提交文件到本地仓库

$ git commit -m "wrote a readme file"
[master (root-commit) eaadf4e] wrote a readme file1 file changed, 2 insertions(+)create mode 

-m后面输入的是本次提交的说明

commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

$ git 
$ git  
$ git commit -m "add 3 files."

5、小结

二、时光机穿梭

1、git status 命令可以看仓库当前的状态

$ git status
On branch master
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified:    changes added to commit (use "git add" and/or "git commit -a")

git status命令可以让我们时刻掌握仓库当前的状态,上面的命令输出告诉我们&#被修改过了,但还没有准备提交的修改。

2、git diff 可以查看修改内容

$ git  
diff --git  
index 46d49bf..9247db6 100644
--- 
+++ 
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.Git is free software.

git diff顾名思义就是查看difference,显示的格式正是Unix通用的diff格式,可以从上面的命令输出看到,我们在第一行添加了一个distributed单词。

3、git log 查看历史记录

$ git log
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail>
Date:   Fri May 18 21:06:15 2018 +0800append GPLcommit e475afc93c209a690c39c13a46716e8fa000c366
Author: Michael Liao <askxuefeng@gmail>
Date:   Fri May 18 21:03:36 2018 +0800add distributedcommit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail>
Date:   Fri May 18 20:59:18 2018 +0800wrote a readme file

git log命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是append GPL,上一次是add distributed,最早的一次是wrote a readme file。
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上–pretty=oneline参数:

$ git log --pretty=oneline
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL
e475afc93c209a690c39c13a46716e8fa000c366 add distributed
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file

需要友情提示的是,你看到的一大串类似1094adb…的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id和我的肯定不一样,以你自己的为准。为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。

4、git reset --hard commit_id 版本穿梭

  • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id

  • 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

  • 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

$ git log
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail>
Date:   Fri May 18 21:06:15 2018 +0800append GPLcommit e475afc93c209a690c39c13a46716e8fa000c366
Author: Michael Liao <askxuefeng@gmail>
Date:   Fri May 18 21:03:36 2018 +0800add distributedcommit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail>
Date:   Fri May 18 20:59:18 2018 +0800wrote a readme file
$ git reset --hard 1094a
HEAD is now at 83b0afe append GPL
$ git reflog
e475afc HEAD@{1}: reset: moving to HEAD^
1094adb (HEAD -> master) HEAD@{2}: commit: append GPL
e475afc HEAD@{3}: commit: add distributed
eaadf4e HEAD@{4}: commit (initial): wrote a readme file

5、git checkout – 撤销修改

命令git checkout -- 意思就是,把文件在工作区的修改全部撤销,这里有两种情况:

  • 一种是自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
  • 一种是已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
    总之,就是让这个文件回到最近一次git commit或git add时的状态。

6、git reset HEAD 把暂存区的修改回退到工作区

用命令git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区:

$ git reset 
Unstaged changes after reset:

7、git rm 删除文件

$ git 
rm &#'$ git commit -m ""
[master d46f35e] 1 file changed, 1 deletion(-)delete mode 

另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:

$ git checkout -- 

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

命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。

三、远程仓库

1、git remote add origin 关联仓库

2、git push -u origin master 把当前分支master推送到远程

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

3、git remote -v 查看远程库信息

$ git remote -v
origin  git@github:michaelliao/learn-git.git (fetch)
origin  git@github:michaelliao/learn-git.git (push)

4、git remote rm 删除远程仓库

根据名字删除,比如删除origin:

$ git remote rm origin

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

5、小结

6、git clone 命令克隆仓库

$ git clone git@github:michaelliao/gitskills.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3
Receiving objects: 100% (3/3), done.

四、分支管理

1、git switch -c dev 创建并切换dev分支

$ git switch -c dev
Switched to a new branch 'dev'

直接切换到已有的master分支,可以使用:

$ git switch master

2、git branch 命令查看当前分支

$ git branch
* devmaster

git branch命令会列出所有分支,当前分支前面会标一个*号。

3、git merge 命令用于合并指定分支到当前分支

把dev分支的工作成果合并到master分支上:

$ git merge dev
Updating d46f35e..b17d20e
 | 1 +1 file changed, 1 insertion(+)

4、git branch -d dev 删除dev分支

$ git branch -d dev
Deleted branch dev (was b17d20e).

5、小结

6、git log --graph 命令可以看到分支合并图

7、git merge --no-ff -m “merge with no-ff” dev 合并分支

准备合并dev分支,请注意–no-ff参数,表示禁用Fast forward:

$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive'  | 1 +1 file changed, 1 insertion(+)

因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。

合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

8、git stash 把当前工作现场“储藏”起来

Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:

$ git stash
Saved working directory and index state WIP on dev: f52c633 add merge

9、git stash pop 恢复内容的同时把stash内容也删了

10、git stash list 查看存储内容

11、cherry-pick 复制一个特定的提交到当前分支

$ git branch
* devmaster
$ git cherry-pick 4c805e2
[master 1d4b803] fix bug 1011 file changed, 1 insertion(+), 1 deletion(-)

Git自动给dev分支做了一次提交,注意这次提交的commit是1d4b803,它并不同于master的4c805e2,因为这两个commit只是改动相同,但确实是两个不同的commit。用git cherry-pick,我们就不需要在dev分支上手动再把修bug的过程重复一遍。

有些聪明的童鞋会想了,既然可以在master分支上修复bug后,在dev分支上可以“重放”这个修复过程,那么直接在dev分支上修复bug,然后在master分支上“重放”行不行?当然可以,不过你仍然需要git stash命令保存现场,才能从dev分支切换到master分支。

12、小结

13、feature分支 开发功能

$ git switch -c feature-vulcan
Switched to a new branch 'feature-vulcan'

开发一个新feature,最好新建一个分支;

如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。

14、git remote 查看远程库的信息

$ git remote
origin

15、小结

查看远程库信息,使用git remote -v;本地新建的分支如果不推送到远程,对其他人就是不可见的;从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

16、git rebase 把分叉的提交变成直线

rebase操作可以把本地未push的分叉提交历史整理成直线;

rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

五、标签管理

1、git tag 就可以打一个新标签

$ git tag v1.0

2、git tag 查看所有标签

$ git tag
v1.0

3、git show 查看标签信息

$ git show v0.9
commit f52c63349bc3c1593499807e5c8e972b82c8f286 (tag: v0.9)
Author: Michael Liao <askxuefeng@gmail>
Date:   Fri May 18 21:56:54 2018 +0800add mergediff --git  
...

4、git tag小结

命令git tag 用于新建一个标签,默认为HEAD,也可以指定一个commit id;

命令git tag -a -m "blablabla…"可以指定标签信息;

命令git tag可以查看所有标签。

5、git tag -d v0.1 删除标签

$ git tag -d v0.1
Deleted tag 'v0.1' (was f15b0dd)

6、git push origin 推送某个标签到远程

$ git push origin v1.0
Total 0 (delta 0), reused 0 (delta 0)
To github:michaelliao/learngit.git* [new tag]         v1.0 -> v1.0

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

$ git push origin --tags
Total 0 (delta 0), reused 0 (delta 0)
To github:michaelliao/learngit.git* [new tag]         v0.9 -> v0.9

7、标签已经推送到远程,要删除远程标签

先从本地删除:

$ git tag -d v0.9
Deleted tag 'v0.9' (was f52c633)

然后,从远程删除。删除命令也是push,但是格式如下:

$ git push origin :refs/tags/v0.9
To github:michaelliao/learngit.git- [deleted]         v0.9

要看看是否真的从远程库删除了标签,可以登陆GitHub查看。

8、小结

命令git push origin <tagname>可以推送一个本地标签;命令git push origin --tags可以推送全部未推送过的本地标签;命令git tag -d <tagname>可以删除一个本地标签;命令git push origin :refs/tags/<tagname>可以删除一个远程标签。

六、既关联GitHub,又关联Gitee

使用多个远程库时,我们要注意,git给远程库起的默认名称是origin,如果有多个远程库,我们需要用不同的名称来标识不同的远程库。

仍然以learngit本地库为例,我们先删除已关联的名为origin的远程库:

git remote rm origin

然后,先关联GitHub的远程库:

git remote add github git@github:michaelliao/learngit.git

注意,远程库的名称叫github,不叫origin了。

接着,再关联Gitee的远程库:

git remote add gitee git@gitee:liaoxuefeng/learngit.git

同样注意,远程库的名称叫gitee,不叫origin。

现在,我们用git remote -v查看远程库信息,可以看到两个远程库:

git remote -v
gitee	git@gitee:liaoxuefeng/learngit.git (fetch)
gitee	git@gitee:liaoxuefeng/learngit.git (push)
github	git@github:michaelliao/learngit.git (fetch)
github	git@github:michaelliao/learngit.git (push)

如果要推送到GitHub,使用命令:

git push github master

如果要推送到Gitee,使用命令:

git push gitee master

这样一来,我们的本地库就可以同时与多个远程库互相同步:

本文发布于:2024-02-02 02:42:40,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170681524640881.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:命令   Git
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23