使用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. (转)CASE WHEN 用法

    Case具有两种格式.简单Case函数和Case搜索函数. 简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END   ...

  2. long long or int

    long long or int 很多时候long long爆空间,int有时又不够 . 在算乘法的时候,要保证乘出来的中间项也不爆long long

  3. 使用tortoisegit简化命令

    1. 如果希望git保存用户名和密码,后续操作都无需输入密码: git命令: git config --global credential.helper store   或者通过tortoisegit ...

  4. 基于Socket的低层次Java网络编程

    Socket通讯 网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接.Socket是TCP/IP协议的一个十分流 ...

  5. OSINT系列:威胁信息挖掘ThreatMiner

     OSINT系列:威胁信息挖掘ThreatMiner   ThreatMiner.org是一个非营利性组织.它收集各种开放的网络信息和安全信息,然后进行整理,供安全人员检索.它可以提供六大类.十八小类 ...

  6. BZOJ.1022.[SHOI2008]小约翰的游戏John(博弈论 Anti-Nim)

    题目链接 Anti-Nim游戏: 先手必胜当且仅当: 1.所有堆的石子数为1,且异或和为0 2.至少有一堆石子数>1,且异或和不为0 简要证明: 对于1:若异或和为1,则有奇数堆:异或和为0,则 ...

  7. BZOJ.3809.Gty的二逼妹子序列(分块 莫队)

    题目链接 /* 25832 kb 26964 ms 莫队+树状数组:增加/删除/查询 都是O(logn)的,总时间复杂度O(m*sqrt(n)*logn),卡不过 莫队+分块:这样查询虽然变成了sqr ...

  8. [POI2014]Couriers

    OJ题号:BZOJ3524.BZOJ2223.洛谷3567 思路: 维护一颗可持久化权值线段树,记录每次加入数字时,不同数字出现的个数.对于每一个询问$[l,r]$,同时查询以$r$和$l-1$为根的 ...

  9. ssm数据库中文乱码问题

    (1)详解Spring中的CharacterEncodingFilter--forceEncoding为true    <a href="http://www.cnblogs.com/ ...

  10. react Immutability 理解

    在开发过程中经常会遇到state里有数组和对象的情况,比如当用splice去改变数组再调用setState更新的时候,会发现并没有生效,这是因为react里的state是Immutability(不可 ...