git-github



INSTALL

Mac上安装git

http://sourceforge.net/projects/git-osx-installer/
或者homebrew安装。

Windows上安装Git

https://gitforwindows.org/
下载安装程序,然后按默认选项安装即可。
安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

配置

用户信息
#首先在本地创建ssh key
$ ssh-keygen -t rsa -C "379144671@qq.com"
#验证是否成功
$ ssh -T git@github.com
#配置用户名和账号
$ git config --global user.name "view1994"
$ git config --global user.email 379144671@qq.com

如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。

如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。

在以下3个地方会有git配置文件,优先级依次升高:

  • /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
  • ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
  • 当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。
比较器
$ git config --global merge.tool vimdiff

Git 可以理解 kdiff3,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,和 opendiff 等合并工具的输出信息。当然,也可以指定使用自己开发的工具。

查看

要检查已有的配置信息,可以使用git config --list命令:
在这里插入图片描述
有时候会看到重复的变量名,那就说明它们来自不同的配置文件(比如 /etc/gitconfig 和 ~/.gitconfig),不过最终 Git 实际采用的是最后一个。
这些配置我们也可以直接打开 ~/.gitconfig 或 /etc/gitconfig 看到。

也可以直接查阅某个环境变量的设定,只要把特定的名字跟在后面即可:
在这里插入图片描述

工作流程

在这里插入图片描述

新建仓库

git init

$ cd xxx	#进到要当作仓库的文件夹中,没有的话就先mkdir一个
$ git init
$ ls -ah #列出当前路径下全部文件名,包括隐藏文件,会看到多了个.git文件夹,所有 Git 需要的数据和资源都存放在这个目录中,说明创建成功了

或者用git init+WORKROOT来将WORKROOT指定为仓库。
在这里插入图片描述
如果当前目录下有几个文件想要纳入版本控制,需要先用 git add 命令告诉 Git 开始对这些文件进行跟踪,然后提交:

$ git add *.c	#将当前路径下所有c文件加入暂存区,也可以用add . 来加入所有文件
$ git commit -m '初始化项目版本'	#提交暂存区的改动,-m后面是log message 

克隆仓库

使用 git clone 从现有 Git 仓库中拷贝项目(类似 svn checkout)。
格式:git clone <repo> <directory>
参数:
<repo>是要克隆的仓库地址,一般上github上去复制;
<directory>本地目录,是要把这个仓库克隆到的位置,可以不指定,不指定时就放到当前目录下了。

例如,把我的一个仓库克隆到当前路径下的myLeetCode文件夹中:

git clone https://github.com/view1994/LeetCodeExercise  myLeetCode

基本操作

git add

用来把文件加到暂存区。
git add test_git表示把test_git文件加到暂存区。

git status

用来查看当前git的状态,可以看到有没有可以上传的文件和未加到暂存区的文件等。
后面可以加上-s参数,即git status -s,表示用符号来显示文件状态,不加-s的时候提示的废话比较多:
在这里插入图片描述
Alt text
深红色的??表示这个文件还没加到暂存区,是暂存区跟工作区不一样的地方;
绿色的A表示这个文件已经加到暂存区了,可以commit了;
红色的M表示这个文件被改了,被改的内容没加到暂存区。
AM 状态的意思是,这个文件在将它添加到缓存之后又有改动。改动后要再执行 git add 命令将其添加到缓存中,否则上传的就只有之前的改动了。

git diff

git diff 用来查看执行 git status 结果的详细信息。
git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别。

尚未缓存的改动:git diff
查看已缓存的改动: git diff --cached
查看已缓存的与未缓存的所有改动:git diff HEAD
显示摘要而非整个 diff:git diff --stat

在这里插入图片描述

git commit

git add 命令用来将想要快照的内容写入缓存区, 而执行 git commit 将缓存区内容添加到仓库中。
Git 为每一个提交都记录名字与电子邮箱地址,所以需要先配置好用户名和邮箱地址。

$ git add test_git
$ git commit -m "这里是提交说明"

如果没有设置 -m 选项,Git 会尝试打开一个编辑器以填写提交说明信息。 如果 Git 在你对它的配置中找不到相关信息,默认会打开 vim。所以,还是养成写-m的习惯吧。

另外,如果觉得 git add 提交缓存的流程太过繁琐,Git 也允许用 -a 选项跳过这一步,可以把add和commit两步合二为一。命令格式:git commit -a
例如:

git commit -am '修改 test_git 文件'

git reset HEAD

用于取消已缓存的内容。

git log

git log用来查看版本信息,开头的一堆数字是版本的ID,常用有如下形式:

$ git log --oneline		#在一行内显示一条log,ID只显示开头几位,这样显示的比较好看
$ git log --pretty=oneline	#在一行内显示一条log

git reset

查看完版本信息后,可以选择任意一个版本去退回,一般用git reset --hard <id>来在各版本之间跳转:

$ git log --oneline
$ git reset --hard <id>

git reflog

git reflog?用来查看完整的log,包括版本退回。
在这里插入图片描述

gitHub 工作流程

$ mkdir git-test                     # 创建测试目录
$ cd git-test/                       # 进入测试目录
$ echo "#  Git 测试" >> README.md     		# 创建 README.md 文件并写入内容
$ ls                                        # 查看目录下的文件
README
$ git init                                  # 初始化
$ git add README.md                         # 添加文件
$ git commit -m "添加 README.md 文件"        # 提交并备注信息
[master (root-commit) 0205aab] 添加 README.md 文件
 1 file changed, 1 insertion(+)
 create mode 100644 README.md

# 提交到 Github
$ git remote add origin git@github.com:view1994/newRepo.git
$ git push -u origin master

建立联系

git bash中,进入要上传的仓库路径,添加远程地址:

$ git remote add origin git@github.com:view1994/yourRepo.git

其中yourRepo是新建的远程仓库名,加完之后进入.git,打开config,这里会多出一个remote "origin"内容,这就是刚才添加的远程地址,也可以直接修改config来配置远程地址。

创建新文件夹,打开,然后执行 git init 以创建新的 git 仓库。

git clone

创建一个本地仓库的克隆版本:

$ git clone /path/to/repository 

克隆远端服务器上的仓库,你的命令会是这个样子:

$ git clone username@host:/path/to/repository

你的本地仓库由 git 维护的3个tree组成:

  • 第一个是你的 工作目录,它持有实际文件;
  • 第二个是 暂存区Index,它像个缓存区域,临时保存你的改动;
  • 最后是 HEAD,它指向你最后一次提交的结果。

git remote

查看当前已有的远程仓库:$ git remote
加上 -v 参数,就能看到每个别名的实际链接地址$ git remote -v

tanys@prtanys MINGW32 /d/VIEW/13python/LeetCodeExercise (master)
$ git remote
origin

tanys@prtanys MINGW32 /d/VIEW/13python/LeetCodeExercise (master)
$ git remote -v
origin  git@github.com:view1994/LeetCodeExercise.git (fetch)
origin  git@github.com:view1994/LeetCodeExercise.git (push)

删除远程仓库
git remote rm [别名]

git add

这是git 基本工作流程的第一步:
修改代码后(把它们添加到暂存区),使用如下命令:

git add <filename>
git add * 这个是添加当前目录下的全部文件

git commit

第二步:
实际提交改动:
git commit -m "代码提交信息,多少要写点儿"
现在,修改的代码已经提交到了 HEAD,但是还没到远端仓库。

git push

第三步:推送改动
修改的代码已经在本地仓库的 HEAD中了,将这些改动提交到远端仓库:
git push origin master
可以把 master 换成你想要推送的任何分支。

如果还没有克隆现有仓库,并想将本地仓库连接到某个远程服务器,用如下命令添加:
git remote add origin <server>
如此就能够将改动推送到所添加的服务器上去了。

分支

分支是用来将特性开发绝缘开来的。
在创建仓库的时候,master 是默认的分支。实际在其他分支上进行开发,完成后再将它们合并到主分支上。
在现有软件上添加新功能时,可以创建一个叫做"feature_x"的分支,并切换过去:
git checkout -b feature_x
切换回主分支:
git checkout master
再把新建的分支删掉:
git branch -d feature_x
除非将分支推送到远端仓库,不然该分支别人都是看不到的:
git push origin <branch>

git fetch 和 git merge

Git 有两个命令用来提取远程仓库的更新。
1、从远程仓库下载新分支与数据:
git fetch
该命令执行完后需要执行git merge来合并远程分支到当前所在的分支。

2、从远端仓库提取数据并尝试合并到当前分支:
git merge

假设你配置好了一个远程仓库,并且你想要提取更新的数据,你可以首先执行git fetch [alias]告诉 Git 去获取它有你没有的数据,然后执行 git merge [alias]/[branch]将服务器上的更新(例如有人把自己的更新推送到服务器了)合并到你的当前分支。

git pull 更新与合并

要更新你的本地仓库至最新改动,执行:$ git pull
这一步是用来在工作目录中 获取(fetch) 并 合并(merge) 远端的改动。

前提是本地没有改动蛤,如果本地有没有push的改动,会pull失败的,pull失败之后在本地能看到别人上传远端的更新记录,这个时候就只能手动合代码咯~一般先reset一下自己的代码,然后pull远端的更新,然后再改自己的代码,毕竟,每次要更新到远端时要保持自己的版本是最新版本,再合代码上传,SVN上也是这样滴

合并分支

要合并其他分支到你的当前分支(例如 master),执行:
git merge <branch>
在这两种情况下,git 都会尝试去自动合并改动。自动合并并非每次都能成功,可能出现冲突(conflicts)。 这时候就需要修改这些文件来手动合并这些冲突(conflicts)。改完之后,需要将它们标记为合并成功:
git add <filename>
在合并改动之前,你可以使用如下命令预览差异:
git diff <source_branch> <target_branch>

替换本地改动

假如操作失误,可以使用如下命令替换掉本地改动:
git checkout -- <filename>
此命令会使用 HEAD 中的最新内容替换掉工作目录中的文件。
已添加到暂存区的改动(也就是add后的文件)以及新添加的文件都不会受到影响。

如果想丢弃本地的所有改动与提交,可以到服务器上获取最新的版本历史,并将本地主分支指向它:

git fetch origin
git reset --hard origin/master

标签

创建标签就跟平时定义软件发布版本一样的。在 SVN 中也有标签的概念。
创建一个叫做 1.0.0 的标签:
git tag 1.0.0 1b2e1d63ff
1b2e1d63ff 是想要标记的版本 ID 的前 10 位字符。可以使用git log获取版本 ID,也可以使用少一点的ID 前几位,只要它的指向具有唯一性。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值