使用github一段时间,一直使用的是可视化工具,配合公司转用git,提前联系下git的命令。

安装

windows上安装git

git for windows下载安装包,我下的是Git-2.13.0-64-bit.exe,按默认选项安装。

安装完毕后,用命令查下版本看是否安装正常:

D:\git-exercise-workspace>git --version
git version 2.13.0.windows.1

常用命令

创建新仓库

新建一个文件夹,比如D:\git-exercise-workspace\new-git-respo,想在此文件夹上创建一个新仓库,可以:

D:\git-exercise-workspace\new-git-respo>git init
Initialized empty Git repository in D:/git-exercise-workspace/new-git-respo/.git
/

从提示可知,创建一个空仓库完成,文件夹中多了一个.git的隐藏文件夹。

区间划分(工作区、暂存区、仓库区)

工作区就是我们可操作的区域,比如例子中的new-git-respo中除.git的区域。

暂存区,存放于.gitindex

仓库区,存放于.git

关于为什么需要暂存区,这个讨论我觉得不错:为什么要先 git add 才能 git commit ?

检出仓库

相比创建仓库,我们也许更常检出已有仓库。

我在github上创建了一个仓库用于练习https://github.com/nicchagil/git-exercise,现在就检出此仓库吧:

D:\git-exercise-workspace>git clone https://github.com/nicchagil/git-exercise
Cloning into 'git-exercise'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.

git-exercise被检出,静静地躺在我的仓库下。

暂存、提交、推送

在仓库中,修改完一个文件后,可以可以先将它暂存起来:

D:\git-exercise-workspace\git-exercise>git add *

当然,上述命令的*代表全部,也可指定某文件。

然后可以确切地提交到本地仓库:

D:\git-exercise-workspace\git-exercise>git commit -m "make a update and a add"
[master 2077ee9] make a update and a add
2 files changed, 2 insertions(+)
create mode 100644 1.txt

此时,改动还在我们本地仓库中,我们可以推送到远程仓库中:

D:\git-exercise-workspace\git-exercise>git push origin master

它会要求输入账号、密码。

拉取

可以拉取远程仓库的改动到本地仓库:

git pull

分支

创建分支

创建一个分支并切换过去:

D:\git-exercise-workspace\git-exercise>git checkout -b b_requirement_1
Switched to a new branch 'b_requirement_1'

然后可做正常的修改、暂存、提交

最后推送到远程服务器的分支上:

D:\git-exercise-workspace\git-exercise>git push origin b_requirement_1

切换分支

操作完之后,也许需要继续操作主干的内容,可以切换回主干:

D:\git-exercise-workspace\git-exercise>git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.

会发现仓库的内容切换为主干的内容了。

当然也可切换到其它分支了。

查看日志

可查看历史日志:

git log

日志记录可能有些长,通过fb向前和向后滚动吧,q退出。

查看当前工作状态

下面两个查看当前工作状态,两次期间我修改和增加了部分文件:

D:\git-exercise-workspace\git-exercise>git stash
No local changes to save D:\git-exercise-workspace\git-exercise>git stash
Saved working directory and index state WIP on master: cc403c1 Update README.md

还原本地改动

可通过以下命令还原本地改动:

D:\git-exercise-workspace\git-exercise>git checkout -- README.md

如果暂存区有此文件,会还原成暂存区的文件内容。

Eclipse下操作git

Java的IDE,Eclipse,一般默认集成了git的插件(如果没有,可能Eclipse的版本比较低,更新一下试试)。

Windows > Show View > Other > Git > Git Repositories调出Git仓库列表视图。再引入现有的仓库。

右击没绑定的项目名 > Team > Share Project > Git > 选择已引入的仓库 > Finish

非同一文件冲突的解决

如果A文件本地发生的修改,B文件远程发生了修改,此时我想提交本地文件,右击项目 > Team > Synchronize Workspace,Eclipse会提示B文件有更新。

由于同一文件并无冲突,我仍能继续提交代码到本地仓库,但是push到远程仓库会被拒绝:

此时项目名会有此标记,表示,有一个待pull和一个待push,我可以先pull再push:



你查看提交记录,你会发现它其实是一个Merge branch的操作。

同一文件冲突的解决

当一个文件,本地发生了修改,远程也发生了修改,会发生冲突,比如下图。

在文件的第2行,本地修改为:2018-07-08 14:33 by nick (modify),而远程其他人修改为:2018-07-08 14:32 by hello (add)

当我想提交我本地的版本时,右击项目 > Team > Synchronize Workspace,Eclipse会提示我有冲突:

在有冲突的情况下,如果我想pull代码(右击项目 > Team > Pull),它也会提示我有冲突,不能pull:

此时,我们可以通过stash功能暂存我们的修改(右击项目 > Team > Stashes > Stash changes > 输入标识此次变更名字),然后你的变更在项目中就会被还原掉,你就能正常pull了。

然后你需要将暂存的修改应用到我们的项目中(右击项目 > Team > Stashes > 标识该次变更名字),会出现下述窗口,你可以看到之前所做的修改,点击右上角绿色箭头的图标,就可以将修改应用到项目中:

应用之后,如果有冲突是这样的(向左的标识为HEAD的是远程的代码,向右的标识为stash的是我们本地的修改):

解决完冲突后,将该文件标识为已解决冲突(右击文件 > Mark as Merged),然后就能提交了:

生成SSH KEY

SSH,是Secure Shell,即安全外壳协议,用于安全传输。

下面介绍用git生成SSH KEY,更具体的介绍见GITLAB的SSH指南

查看是否已生成SSH KEY

打开Git Bash,使用下述命令查询:

Administrator@USER-20141117SF MINGW32 ~
$ cat ~/.ssh/id_rsa.pub
cat: /c/Users/Administrator/.ssh/id_rsa.pub: No such file or directory

其实就是查看C:\Users\Administrator\.ssh路径下有没有SSH KEY。

生成RAS密钥对

$ ssh-keygen -t rsa -C "我的邮箱" -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/Administrator/.ssh/id_rsa.
Your public key has been saved in /c/Users/Administrator/.ssh/id_rsa.pub.

可以看到分别生成了一个私钥一个公钥。

拷贝SSH KEY

用命令拷贝SSH KEY值:

cat ~/.ssh/id_rsa.pub | clip

当然,也可以自己手动拷贝,但范围不要搞错了,记得拷贝id_rsa.pub开始于ssh-rsa(含),结束于邮箱的部分,结构大概为:

ssh-rsa xxxxxxxxxxxxxxxxxxxxxxxxx 我的邮箱

参考的文档

【工具】我的Git学习日志的更多相关文章

  1. Git学习(一) 版本号管理工具

    Git 是一个分布式版本号控制工具.它的作者 Linus Torvalds 是这样给我们介绍 Git  -- The stupid content tracker(傻瓜式的内容跟踪器) 1. Git ...

  2. git学习(这个我没有整理,是我不断在学习的过程中,自己总结的,对象是我,不过有问题的,我们可以相互交流)

    每次git提交,都会有一个parent指针,指向上一次的commit ,   如果合并,master就和hotfix河道一起,就直接删除hotfix就OK     此时,虽然操作一样,大底层实现不一样 ...

  3. Git学习(一):初始化仓库、添加文件、版本回退

    目录 Git学习(一):初始化.添加文件.版本回退 初始化一个仓库 添加文件到Git仓库 版本回退 Git学习(一):初始化.添加文件.版本回退 初始化一个仓库 本文使用的命令行工具为cmder,部分 ...

  4. Python+VSCode+Git 学习总结

    稍等,先写个脑图... 继续,读完本文,你会学会: 1.如何在VSCode中写Python代码: 2.如何在VSCode中使用Git: 为什么写这篇总结 首先,我假设你是一名Python语言初学者,你 ...

  5. Git 学习(四)操作修改和版本穿梭

    Git 学习(四)操作修改和版本穿梭 之前的章节,已介绍了本地Git库创建.暂存区增.删.改,以及提交版本库:可回顾下命令操作: git add 和 git commit. 光有之前章节的操作,Git ...

  6. 版本工具管理之----git

    如何查看隐藏文件夹: 如果你看不到.git目录,你需要让隐藏的文件可见.具体做法就是打开一个Terminal窗口,输入以下命令: defaults write com.apple.finder App ...

  7. composer的安装和使用 学习日志

    如果你做为一个phper,没有用过composer,那你真的不是一个合格的开发者.那么就来记录一下composer的学习日志 下面分享几个学习源头: composer中文网站:https://www. ...

  8. vagrant的学习之Git学习

    vagrant的学习之Git学习 参考学习网址: http://www.runoob.com/git/git-install-setup.html. http://www.bootcss.com/p/ ...

  9. Git学习笔记--实践(三)

    文中红色的文字(标为:## 插曲)是在Git学习/实践过程中,我个人遇到的一些问题,每个“## 插曲”之后,都有相应的解决方案. 一.创建版本库 版本库又名仓库,英文名repository,可简单的理 ...

随机推荐

  1. Socket进程通信机制

    1.Socket通常称为“套接字”,用于描述IP地址和端口,是一个通信链的句柄. 2.应用程序通过套接字向网络发出请求或者应答网络请求. 3.Socket既不是一个程序,也不是一种协议,其只是操作系统 ...

  2. centos关机、重启、图形界面与命令行界面切换命令

    1.关机: init0;  poweroff;  halt;  shutdown 2.重启: init1;  reboot; 3.图形界面切换到命令行界面: init3; 或者,修改配置文件: #vi ...

  3. mac 回车键、空格键失灵(非物理原因)解决方法

    1.关机2.按住shift+control+option+开关机键,大概10秒左右,观察键盘电源灯是否变色,确定是否硬件故障,不变色表正常.3.先按下开关机键后,放开.然后同时按住option+com ...

  4. hdu 1002 A + B Problem II【大数加法】

    题目链接>>>>>> 题目大意:手动模拟大数加法,从而进行两个大数的加法运算 #include <stdio.h> #include <strin ...

  5. vim编辑器基本操作

    命令模式: 按(i)键进入编辑模式,将在光标前面插入: 按(I)键进入编辑模式,将在光标行首插入: 按(a)进入编辑模式,在光标后面插入: 按(A)键进入编辑模式,将在光标行末插入: 按(o)进入编辑 ...

  6. Java中设置方法执行的超时时间java.util.concurrent.Future

    java.util.concurrent.Future Future代表一个异步计算的结果.它提供了方法来检查是否计算已经完成,还是正在计算而处于等待状态,并且也提供了获取计算结果 方法.当计算完成后 ...

  7. 洛谷.2596.[ZJOI2006]书架(Splay)

    题目链接 /* 五个操作: 1.将某元素置顶.删掉这个数,插入最左 2.将某元素置底.同样 3.旋到根后,直接将这个数与前驱/后继交换所有信息 不是左右子节点! 4.5.裸平衡树 ps:1.用pos[ ...

  8. BZOJ4374 : Little Elephant and Boxes

    设$f[i][j][k]$表示前$i$个物品买了$j$个,消耗$k$个钻石,最少花多少钱,可以通过简单的DP求出. 枚举拥有的钻石数以及最多能购买的物品数的下界,那么钱数的下界是定值. 将$n$个箱子 ...

  9. ext2文件系统学习(二)—— 目录磁盘结构

    创建镜像.mount等操作和上一篇一样,测试目录结构如下: 一些文件系统信息如下: Block size:             1024 Inodes per group:  128 Inode ...

  10. ProxySQL

    ProxySQL   http://www.proxysql.com/