前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >git常用命令

git常用命令

作者头像
Rattenking
发布2022-05-11 08:50:05
4100
发布2022-05-11 08:50:05
举报
文章被收录于专栏:Rattenking

1、初始化仓库

$ git init 初始化

在本地新建一个repo,进入一个项目目录,执行git init,会初始化一个repo,并在当前文件夹下创建一个.git文件夹.

$ git add 仓库跟踪

     在提交之前,Git有一个暂存区(staging area),可以放入新添加的文件或者加入新的改动. commit时提交的改动是上一次加入到staging area中      的改动,而不是我们disk上的改动.

     git add .

     会递归地添加当前工作目录中的所有文件.

$ git commit 提交更新 $ git commit -a 跳过跟踪直接提交暂存

     提交已经被add进来的改动.

     git commit -m “the commit message"

     git commit -a 会先把所有已经track的文件的改动add进来,然后提交(有点像svn的一次提交,不用先暂存). 对于没有track的文件,还是需要git add一下.

     git commit --amend 增补提交. 会使用与当前提交节点相同的父节点进行一次新的提交,旧的提交将会被取消.

$ git clone [url] 克隆仓库文件

获取一个url对应的远程Git repo, 创建一个local copy.

        一般的格式是git clone [url].

        clone下来的repo会以url最后一个斜线后面的名称命名,创建一个文件夹,如果想要指定特定的名称,可以git clone [url] newname指定.

$ git clone [url] [文件夹名] 克隆到自定义名文件夹

$ git status 查看跟踪情况 简单格式 $ git status -s

     查询repo的状态.

     git status -s: -s表示short, -s的输出标记会有两列,第一列是对staging区域而言,第二列是对working目录而言.

新添加的未跟踪文件前面有 ?? 标记,新添加到暂存区中的文件前面有 A 标记,修改过的文件前面有 M标记。 你可能注意到了 M 有两个可以出现的位置,出现在右边的 M 表示该文件被修改了但是还没放入暂存区,出现在靠左边的 M 表示该文件被修改了并放入了暂存区。 例如,上面的状态报告显示: README文件在工作区被修改了但是还没有将修改后的文件放入暂存区,lib/simplegit.rb 文件被修改了并将修改后的文件放入了暂存区。 而 Rakefile 在工作区被修改并提交到暂存区后又在工作区中被修改了,所以在暂存区和工作区都有该文件被修改了的记录。

$ cat .gitignore 创建一个名为.gitignore 的文件,列出要忽略的文件模式。

$ cat .gitignore

*.[oa]

*~

第一行告诉 Git 忽略所有以 .o 或 .a 结尾的文件。一般这类对象文件和存档文件都是编译过程中出现的。 第二行告诉Git 忽略所有以波浪符(~)结尾的文件,许多文本编辑软件(比如 Emacs)都用这样的文件名保存副本。 此外,你可能还需要忽略 log,tmp 或者 pid 目录,以及自动生成的文档等等。要养成一开始就设置好 .gitignore 文件的习惯,以免将来误提交这类无用的文件。

文件 .gitignore 的格式规范如下:

要查看尚未暂存的文件更新了哪些部分,不加参数直接输入 git diff:

$ git diff

若要查看已暂存的将要添加到下次提交里的内容,可以用 git diff --cached 命令。

     不加参数的git diff:

     show diff of unstaged changes.

     此命令比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容.

     若要看已经暂存起来的文件和上次提交时的快照之间的差异,可以用:

     git diff --cached 命令.

     show diff of staged changes.

     (Git 1.6.1 及更高版本还允许使用 git diff --staged,效果是相同的).

     git diff HEAD

     show diff of all staged or unstated changes.

     也即比较woking directory和上次提交之间所有的改动.

     如果想看自从某个版本之后都改动了什么,可以用:

     git diff [version tag]

     跟log命令一样,diff也可以加上--stat参数来简化输出.

     git diff [branchA] [branchB]可以用来比较两个分支.

     它实际上会返回一个由A到B的patch,不是我们想要的结果.

     一般我们想要的结果是两个分支分开以后各自的改动都是什么,是由命令:

     git diff [branchA]…[branchB]给出的.

     实际上它是:git diff $(git merge-base [branchA] [branchB]) [branchB]的结果.

$ git rm 移除文件

$ git rm --cached 移除暂存区文件

     git rm file: 从staging区移除文件,同时也移除出工作目录.

     git rm --cached: 从staging区移除文件,但留在工作目录中.

     git rm --cached从功能上等同于git reset HEAD,清除了缓存区,但不动工作目录树.

$ git mv [文件夹2名字] [文件夹1名字] 将 文件夹1名字 改为 文件夹2名字

git rm - - cached orig; mv orig new; git add new

2、查看提交历史

$ git log

一个常用的选项是 -p,用来显示每次提交的内容差异。 你也可以加上 -2 来仅显示最近两次提交

$ git log -p -2

想看到每次提交的简略的统计信息,你可以使用 --stat 选项

$ git log --stat

show commit history of a branch.

     git log --oneline --number: 每条log只显示一行,显示number条.

     git log --oneline --graph:可以图形化地表示出分支合并历史.

     git log branchname可以显示特定分支的log.

     git log --oneline branch1 ^branch2,可以查看在分支1,却不在分支2中的提交.^表示排除这个分支(Window下可能要给^branch2加上引号).

     git log --decorate会显示出tag信息.

     git log --author=[author name] 可以指定作者的提交历史.

     git log --since --before --until --after 根据提交时间筛选log.

     --no-merges可以将merge的commits排除在外.

     git log --grep 根据commit信息过滤log: git log --grep=keywords

     默认情况下, git log --grep --author是OR的关系,即满足一条即被返回,如果你想让它们是AND的关系,可以加上--all-match的option.

     git log -S: filter by introduced diff.

     比如: git log -SmethodName (注意S和后面的词之间没有等号分隔).

     git log -p: show patch introduced at each commit.

     每一个提交都是一个快照(snapshot),Git会把每次提交的diff计算出来,作为一个patch显示给你看.

     另一种方法是git show [SHA].

     git log --stat: show diffstat of changes introduced at each commit.

     同样是用来看改动的相对信息的,--stat比-p的输出更简单一些.

3、撤消操作

有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend 选项的提交命令尝试重新提交:

$ git commit --amend

你提交后发现忘记了暂存某些需要的修改,可以像下面这样操作:

$ git commit -m ‘initial commit’

$ git add forgotten_file

$ git commit --amend

     提交已经被add进来的改动.

     git commit -m “the commit message"

     git commit -a 会先把所有已经track的文件的改动add进来,然后提交(有点像svn的一次提交,不用先暂存). 对于没有track的文件,还是需要git add一下.

     git commit --amend 增补提交. 会使用与当前提交节点相同的父节点进行一次新的提交,旧的提交将会被取消.

4、查看远程仓库

如果想查看你已经配置的远程仓库服务器,可以运行 git remote 命令。 它会列出你指定的每一个远程服务器的简写。 如果你已经克隆了自己的仓库,那么至少应该能看到 origin - 这是 Git 给你克隆的仓库服务器的默认名字:

$ git remote

你也可以指定选项 -v,会显示需要读写远程仓库使用的 Git 保存的简写与其对应的URL。

$ git remote -v

我在之前的章节中已经提到并展示了如何添加远程仓库的示例,不过这里将告诉你如何明确地做到这一点。 运行 gitremote add <shortname> <url> 添加一个新的远程 Git 仓库,同时指定一个你可以轻松引用的简写:

$ git remote add <shortname> <url> 

现在你可以在命令行中使用字符串 pb 来代替整个 URL。 例如,如果你想拉取 Paul 的仓库中有但你没有的信息,可以运行 git fetch pb:

$ git fetch [文件夹名]

list, add and delete remote repository aliases.

     因为不需要每次都用完整的url,所以Git为每一个remote repo的url都建立一个别名,然后用git remote来管理这个list.

     git remote: 列出remote aliases.

     如果你clone一个project,Git会自动将原来的url添加进来,别名就叫做:origin.

     git remote -v:可以看见每一个别名对应的实际url.

     git remote add [alias] [url]: 添加一个新的remote repo.

     git remote rm [alias]: 删除一个存在的remote alias.

     git remote rename [old-alias] [new-alias]: 重命名.

     git remote set-url [alias] [url]:更新url. 可以加上—push和fetch参数,为同一个别名set不同的存取地址.

5、推送到远程仓库

当你想分享你的项目时,必须将其推送到上游。 这个命令很简单:git push [remote-name] [branch-name]。 当你想要将 master 分支推送到 origin 服务器时(再次说明,克隆时通常会自动帮你设置好那两个名字),那么运行这个命令就可以将你所做的备份到服务器:

$ git push origin master/

     push your new branches and data to a remote repository.

     git push [alias] [branch]

     将会把当前分支merge到alias上的[branch]分支.如果分支已经存在,将会更新,如果不存在,将会添加这个分支.

     如果有多个人向同一个remote repo push代码, Git会首先在你试图push的分支上运行git log,检查它的历史中是否能看到server上的branch现在的tip,如果本地历史中不能看到server的tip,说明本地的代码不是最新的,Git会拒绝你的push,让你先fetch,merge,之后再push,这样就保证了所有人的改动都会被考虑进来.

6、查看远程仓库

如果想要查看某一个远程仓库的更多信息,可以使用 git remote show [remote-name] 命令。 如果想以一个特定的缩写名运行这个命令,例如 origin,会得到像下面类似的信息:

$ git remote show origin

7、远程仓库的移除与重命名

如果想要重命名引用的名字可以运行 git remote rename 去修改一个远程仓库的简写名。 例如,想要将pb 重命名为 paul,可以用 git remote rename 这样做:

$ git remote rename pb paul

如果因为一些原因想要移除一个远程仓库 - 你已经从服务器上搬走了或不再想使用某一个特定的镜像了,又或者某一个贡献者不再贡献了- 可以使用 git remote rm :

$ git remote rm paul

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-05-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档