当前位置: 首页 > news >正文

项目管理必备Git使用及关键指令(总体结构 + 必要步骤)教你如何协同开发

Git安装

在linux的Ubuntu发行版,执行以下命令即可安装

sudo apt install git

 其他系统可以到官方网站进行下载安装    Git

 Windows系统的安装包    Git for Windows

 阿里巴巴镜像    CNPM Binaries Mirror

git作为项目管理工具,配置并初始化一个仓库(repository)、开始或停止跟踪(track)文件、暂存(stage)或提交(commit)都是必要环节。与远程仓库的交互可以总结为下图:

初次运行Git配置信息

当安装完 Git 应该做的第一件事就是设置用户名称邮件地址。 多数情况下这样做很必要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改:

$ git config --global user.name "Xiao Mi"
$ git config --global user.email xiaomi@163.com

–global 选项,则该命令只需要运行一次。当想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目,目录下运行没有 –global 选项的命令来配置。

检查配置信息

$ git config --list

检查某一项配置

$ git config user.name

获取帮助

$ git help <verb>
$ git <verb> --help
$ man git-<verb>

查看 Git 帮助手册。<verb> 为具体的命令,比如 git clone --help。如果不输入具体的命令,则会显示常用的操作名,可以根据显示的操作名进一步在帮助手册中查找。

除了直接使用 git <verb> --help,在具体的操作时如果遗忘了命令行的具体写法,也可以在具体操作后加上 -h 查看帮助。比如 git clone -h

获得config命令的手册

$ git help config

获取Git仓库

两种获取Git项目仓库的方法:

一是在现有项目或目录下导入所有文件到Git中; 二是从一个服务器克隆一个现有的Git仓库。

在现有目录中初始化仓库

进入该项目目录

$ git init

(将会创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干)

克隆仓库

$ git clone [url]
$ git clone https://github.com/libgit2/libgit2

该命令执行后会在当前目录下创建一个名为 “libgit2” 的目录,并在这个目录下初始化一个.git文件夹,从远程仓库拉取所有的数据放在改文件夹,然后从中读取最新版本的文件的拷贝。  (https://github.com/libgit2/libgit2 替换为项目的Git仓库地址)

$ git clone https://github.com/libgit2/libgit2 mylibgit

(在本地创建的仓库名字变为 mylibgit)

Git 支持多种数据传输协议。 最常使用的是https:// 协议,也可以使用 git:// 协议或者使用SSH传输协议(SSH安全性高)

记录更新到仓库

当对文件做了些修改,在完成一个阶段的目标后,就提交本次更新到仓库。

工作目录下的每一个文件都不外乎这两种状态:已跟踪或未跟踪。 已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改,已修改或已放入暂存区。 工作目录中除已跟踪文件以外的所有其它文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有放入暂存区。

初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态。

编辑过某些文件之后,由于自上次提交后你对它们做了修改,Git 将它们标记为已修改文件。

(一般逐步将这些修改过的文件放入暂存区,然后提交所有暂存了的修改,如此反复)

检查当前文件状态

$ git status

跟踪新文件

工作目录中创建了新的文件,可使用git add开始跟踪一个文件

$ git add READEME.txt

(git add 命令使用文件或目录的路径作为参数;如果参数是目录的路径,该命令将递归地跟踪该目录下的所有文件)

暂存已修改文件

当一个已被跟踪的文件每次被修改后,需要使用 git add 把最新版本添加到暂存区方可进行提交更新,否则不会提交本次更改到仓库中。

$ git add READEME.txt

(git add 是个多功能命令:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等。可理解为 “添加内容到下一次提交中”。)

查看已暂存和未暂存的修改

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

$ git diff

(若要查看已暂存的将要添加到下次提交里的内容,可以用 git diff –cached 命令。(Git 1.6.1 及更高版本还允许使用 git diff –staged,效果是相同的,但更好记些。)git diff 本身只显示尚未暂存的改动,而不是自上次提交以来所做的所有改动。 所以有时候一下子暂存了所有更新过的文件后,运行 git diff 后却什么也没有,就是这个原因。)

提交更新

当使用 git add 添加到暂存区后,就可以提交到仓库了。在此之前,请一定要确认还有什么修改过的或新建的文件还没有 git add 过,否则提交的时候不会记录这些还没有暂存起来的变化。这些修改过的文件只保留在本地磁盘。

(一个好习惯,每次准备提交前,先用 git status 看下,是不是都已暂存起来了,然后在运行提交命令 git commit )    -m 选项,添加提交信息

$ git commit -m "Input your commit message"

跳过使用暂存区

尽管使用暂存区域的方式可以精心准备要提交的细节,但有时候这么做略显得繁琐。 Git 提供了一个跳过使用暂存区域的方式,只要在提交的时候,给 git commit 加上 -a 选项,Git就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤。

$ git commit -a -m "Commit message"

(不计划把控细节,推荐此方法)

移除文件

要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。 可以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。

$ git rm <finame>

下一次提交时,该文件就不再纳入版本管理了。 如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f(即 force 的首字母)。

这是一种安全特性,用于防止误删还没有添加到快照的数据,这样的数据不能被 Git 恢复。

另外一种情况是,想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。 换句话说,你想让文件保留在磁盘,但是并不想让 Git 继续跟踪。 当你忘记添加 .gitignore 文件,不小心把一个很大的日志文件或一堆 .a 这样的编译生成文件添加到暂存区时,这一做法尤其有用。 为达到这一目的,使用 –cached 选项:

$ git rm --cached README

列出文件或者目录名,也可以使用 glob 模式

(删除 log/ 目录下扩展名为 .log 的所有文件)

$ git rm log/\*.log

* 之前的反斜杠 \, 因为 Git 有它自己的文件模式扩展匹配方式,所以不用 shell 来帮忙展开。

(删除以 ~ 结尾的所有文件)

$ git rm \*~

移动文件

Git 并不显式跟踪文件移动操作。 如果在 Git 中重命名了某个文件,仓库中存储的元数据并不会体现出这是一次改名操作。 不过 Git 会推断出究竟发生了什么

(文件改名)

$ git mv file_from file_to

等价于

$ mv README.md README
$ git rm README.md
$ git add README

忽略文件

一般总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文 件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。

$ cat .gitignore
*.[oa]
*~

第一行告诉 Git 忽略所有以 .o 或 .a 结尾的文件。第二行告诉 Git 忽略所有以波浪符(~)结尾的文件。此外,可能还需要忽略 log,tmp 或者 pid 目录,以及自动生成的文档等等。

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

(1)所有空行或者以 # 开头的行都会被 Git 忽略。
(2)可以使用标准的 glob 模式匹配。 (shell 所使用的简化了的正则表达式)
(3)匹配模式可以以(/)开头防止递归。
(4)匹配模式可以以(/)结尾指定目录。
(5)要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。

(要养成一开始就设置好.gitignore 文件的习惯,以免将来误提交这类无用的文件)

查看提交历史

$ git log

撤销操作

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

$ git commit --amend

这个命令会将暂存区中的文件提交。 如果自上次提交以来你还未做任何修改(例如,在上次提交后马上执行了此命令),那么快照会保持不变,而你所修改的只是提交信息。文本编辑器启动后,可以看到之前的提交信息。 编辑后保存会覆盖原来的提交信息。

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

$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend

(最终你只会有一个提交 - 第二次提交将代替第一次提交的结果)

取消暂存文件

如何操作暂存区域与工作目录中已修改的文件, 这些命令在修改文件状态的同时,也会提示如何撤消操作。

$ git reset HEAD CONTRIBUTING.md

撤销对文件的修改

如何方便地撤消修改,将它还原成上次提交时的样子(或者刚克隆完的样子,或者刚把它放入工作目录时的样子)?git status 也告诉了应该如何做。

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:   CONTRIBUTING.md
$ git checkout -- CONTRIBUTING.md

(在 Git 中任何 已提交的 东西几乎总是可以恢复的。 甚至那些被删除的分支中的提交或使用 –amend 选项覆盖的提交也可以恢复。 然而,任何你未提交的东西丢失后很可能再也找不到了。)

远程仓库的使用

为了能在任意 Git 项目上协作,需要知道如何管理自己的远程仓库。远程仓库是指托管在因特网或其他网络中你的项目的版本库。 与他人协作涉及管理远程仓库以及根据需要推送或拉取数据。

查看远程仓库

如果想查看你已经配置的远程仓库服务器,可以运行 git remote 命令。 它会列出你指定的每一个远程服务器的简写。

$ git remote
origin

(如果已经克隆了自己的仓库,那么至少应该能看到 origin ,这是 Git 给你克隆的仓库服务器的默认名字)

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

$ git remote -v

想要查看某个远程仓库的更多信息,使用 git remote show [remote-name] 命令,如查看 origin 

$ git remote show origin

添加远程仓库

运行 git remote add < shortname > < url > 添加一个新的远程Git 仓库,同时指定一个可以轻松引用的简写

$ git remote add <shortname> <url>

现在可以在命令行中使用字符串 < shortname >来代替整个 URL。如果想获取仓库中有但你没有的信息

$ git fetch <shortname>

从远程仓库中拉取

$ git fetch <remote-name>

这个命令会访问远程仓库,从中拉取所有你还没有的数据。执行完成后,你将会拥有远程仓库中所有分支的引用,可随时合并或查看。若你使用 git clone 命令克隆一个仓库,命令会自动将其添加为远程仓库并默认以 “origin” 为简写。 所以,git fetch origin 会抓取克隆(或上一次抓取)后新推送的所有工作。 必须注意 git fetch 命令会将数据拉取到你的本地仓库,它并不会自动合并或修改你当前的工作。

当准备好时你必须手动将其合并入你的工作。

如果你有一个分支设置为跟踪一个远程分支,可以使用 git pull 命令来自动的抓取然后合并远程分支到当前分支。 默认情况下,git clone 命令会自动设置本地 master 分支跟踪克隆的远程仓库的master 分支(或不管是什么名字的默认分支)。运行 git pull 通常会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支。

推送到远程分支

使用 git push [remote-name] [branch-name] 命令可以推送到远程仓库。 当你想要将 master 分支推送到 origin 服务器时(克隆时通常会自动帮你设置好那两个名字),那么运行这个命令就可以将你所做的备份到服务器

$ git push origin master

开发关键:只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效。 当你和其他人在同一时间克隆,他们先推送到上游然后你再推送到上游,你的推送就会毫无疑问地被拒绝。 你必须先将他们的工作拉取下来并将其合并进你的工作后才能推送。

(先 pull 再 push )

远程仓库的移除与重命名

想要重命名引用的名字可以运行 git remote rename 去修改一个远程仓库的简写名

$ git remote rename oldname newname
$ git remote
origin
newname

(值得注意的是这同样也会修改你的远程分支名字。 那些过去引用 oldname/master 的现在会引用 newname/master )

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

$ git remote rm newname
$ git remote
origin

远程仓库的分支使用

查看分支

如果加上 -a 选项,则会列出本地和远程仓库的所有分支。 

git branch

创建新分支

从当前工作区的状态新建一个分支。 

git branch <name>

切换分支

如果加上 -b 选项,则会从当前工作区新建一个分支,并且进行切换,前提是 branch 不是已存在的分支。

git checkout <branch>

合并分支

注意:一定要先移动到想合并进来的分支。比如想将 bugfix 分支合并到 master,就需要先移动到 master 分支,再执行合并命令。

// 移动到想合入分支后
git merge <branch>

(这里的 branch 为 被合并 的分支名)

删除分支

(删除本地分支)  需要先 移动到其他分支上 才能操作!

git branch -d <branch>

(删除远程分支)

git push <remote> --delete <branch>

协同开发

在你所处的分支,提交前先把代码拉下来更新一下,确保不会覆盖别人的代码

git pull origin 远程分支

存在冲突则解决冲突

git diff  // 然后查看冲突的原因

 查看git状态(哪些还未提交)

git status

提交暂存与本地仓库

git add .
git commit -m '我这次提交是为了干啥'

提交到远程仓库

git push origin 分支名

分支合并

注意:(如果不存在)本地建立一个你要合并的分支(如你在a分支上开发,现在要和b分支merge并提交到b分支上)

git checkout -b 要合并的分支b

要合并分支的代码拉取下来

git pull origin 要合并的分支b

本地合并到b分支

git merge 要合并的分支b

 如果报错,那么查看git状态

git status

Git管理汇总

以上总结整理则是日常工作中,所使用的大部分Git指令

完结撒花!!!!!!!!!!!!!!!!


http://www.mrgr.cn/news/57681.html

相关文章:

  • Python 基于 Chat Completions API 实现外部函数调用
  • wdk 驱动开发 -记录一下
  • perl读取目录,写入文件
  • 力扣71~75题
  • 【C++】C++中的线程
  • SpringCloudStream使用StreamBridge实现延时队列
  • 微信小程序的日期区间选择组件的封装和使用
  • 如何使用IP代理优化亚马逊平台的操作体验
  • Get-WmiObject 命令使用
  • 为什么要进行母线槽测温?应用场景有哪些
  • Leetcode4:寻找两个正数数组中的中位数
  • 青训营 X 豆包MarsCode 技术训练营--小E的射击训练
  • “2+1拼购模式:重塑电商生态,引领消费新风尚“
  • 1024快乐
  • 1024程序员节,福利不说,今天咱就不加班了吧?
  • Python中利用mpld3实现交互式Matplotlib图表:动态可视化指南
  • 牛逼了!教你如何使用Pytest测试框架开展性能基准测试!
  • 【C++】C++的IO流
  • Lim测试平台,五步完成批量生成数据
  • 某大型生产企业流程管理咨询项目成功案例纪实
  • 数据库软件
  • homework 2024.10.23 math-6
  • Java国际版同城跑腿美团饿了么多商户系统小程序源码
  • IT圈前端已死,后端快亡?这个职业却越来越缺人
  • 解锁高效学习新姿势,包阅AI助你一臂之力!
  • 如何消除异步 async 的传染性呢?