zoukankan      html  css  js  c++  java
  • 【工具】我的Git学习日志

    使用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 ew-git-respo,想在此文件夹上创建一个新仓库,可以:

    D:git-exercise-workspace
    ew-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-workspacegit-exercise>git add *
    

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

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

    D:git-exercise-workspacegit-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-workspacegit-exercise>git push origin master
    

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

    拉取

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

    git pull
    

    分支

    创建分支

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

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

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

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

    D:git-exercise-workspacegit-exercise>git push origin b_requirement_1
    

    切换分支

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

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

    会发现仓库的内容切换为主干的内容了。
    当然也可切换到其它分支了。

    查看日志

    可查看历史日志:

    git log
    

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

    查看当前工作状态

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

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

    还原本地改动

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

    D:git-exercise-workspacegit-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:UsersAdministrator.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 我的邮箱
    

    参考的文档

  • 相关阅读:
    C++常用库函数
    ejabberd组成模块
    TCP/IP协议栈的基本工作原理
    erlang ets表
    erlang lists模块函数使用大全
    erlang-string
    erlang四大behaviour之四-supervisor
    erlang四大behaviour之三-gen_event
    erlang四大behaviour之二-gen_fsm
    erlang四大behaviour之一gen_server
  • 原文地址:https://www.cnblogs.com/nick-huang/p/7495966.html
Copyright © 2011-2022 走看看