git learning &4 分支管理

1.常见命令

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

2.本地分支push到 不同名的远程分支(eg:本地a分支的内容需要同步到远程master分支)

查看分支的对应情况
①本地(创建)切换同名分支,然后将别的分支合并到该同名分支,然后push到远程端
git checkout master
git merge a
git push  # will push 'master'

②git push origin a:master

③git push --all origin

3.保留当前分支工作区,切换到其他分支

git stash    #保存当前分支的工作现场
切换分支回来之后
git stash pop #恢复工作现场

ref:Git push won’t do anything (Everything up-to-date)

0

git learning &3远程仓库

1.添加密钥

ref:https://www.cnblogs.com/xixihuang/p/5522424.html

①ssh-keygen -t rsa -C “enlei.gong@cienet.com.cn”

(密钥类型用-t指定,默认ssh-2,这里指定rsa;-c指定注释)

②复制公钥id_rsa.pud到剪贴板:clip <~/.ssh/id_rsa.pub

或者cat  ~/.ssh/id_rsa.pub 然后手动复制

③将ssh key添加到github

ref:https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/

④测试ssh是否成功地添加到github:ssh -T git@github.com

2.添加远程库

关联远程库:

$git remote add origin git@github.com:gongel/learngit.git

推送到远程库

$git push origin master (origin主机名,master远程端分支名)

git push常见用法

0

git 三区域和状态

1.HEAD、Index、Working Directory

Git里有三个区域很重要

  1. HEAD 指向最近一次commit里的所有snapshot
  2. Index 缓存区域,只有Index区域里的东西才可以被commit
  3. Working Directory 用户操作区域

2.各种状态

初始状态

当你checkout分支的时候,git做了这么三件事情

  1. 将HEAD指向那个分支的最后一次commit
  2. 将HEAD指向的commit里所有文件的snapshot替换掉Index区域里原来的内容
  3. 将Index区域里的内容填充到Working Directory里

所以你可以发现,HEAD、Index、Working Directory这个时候里的内容都是一模一样的。

注意:一般会误解为,Index中的内容是空的,只有git add后才会有东西。实际上不是,Index里一直是有东西的。

所以,Git的所有操作就是对这三个区域的状态(或内容)的操作。

Untracked files

如果在目录下新建了文件(即之前没有add过的文件,就会出现“untracked files”即没有被跟踪的文件)

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        b.txt

Changed

如果你在Working Directory里修改了文件,git会发现Working Directory里的内容和Index区域里的内容不一致了。

这个时候git status的结果是:

# Changes not staged for commit:(之前add过的文件但是又被修改了)

Staged

一个文件仅仅changed是不能被commit的,Git要求只能提交Index里的东西。

所以需要git add。这个命令的意思是,把Changed的文件的内容同步到Index区域里。这样Working Directory和Index区域的内容就一致了。这个过程被称之为stage

这个时候git status的结果是:

# Changes to be committed:(已经add过的就等commit了)

Committed

最后,你就可以提交了

git commit

这样,就把HEAD的状态和Index以及Working Directory形成一致了。

ref:https://segmentfault.com/a/1190000006185954

0

git learning &2 undo

1.local changes

$git status
查询哪些文件deleted,modified,Untracked(没有add)
$git diff
查看具体修改的内容
git learning #*
git中的各种状态

2.commit history

$git log
show all commits,starting with newest(从远到近显示commits)

$git reflog
git reflog查看命令历史,可以重返未来(因为一旦回到过去,未来的某个commit id也许不见了)

3.版本回退

$git reset --hard HEAD
用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

$git reset --hard "commit id"
利用git log可以查看某个commit id,版本号没必要写全,前几位就可以了,Git会自动去找(但保证唯一)

4.撤销修改

$git checkout --file_name
丢弃工作区的修改(包括add和commit后也可以成功恢复,其实就是版本库里的文件直接覆盖工作区的文件)

5.删除文件(commit后)

先git rm,并且git commit -m "remove file"

0

git learning &1 初始化操作

1.创建属于自己的标识

git config --global user.name "your name"(一般可以 为你在公司的ID)
git config --global user.email "your email"(一般可以 为你在公司的邮箱)

2.创建版本库

①clone an existing repository
$git clone ssh://user@domain.com/repo.git
git clone支持的协议主要有http://,ssh://,git://,当然也可以是本地的file://

②create a new local repository
$git init (at current directory,check it by using $pwd)

3.添加并提交文件到版本库

$git add file   #把文件添加到版本库,可以多次反复使用,添加多个文件。实际上就是把文件修改添加到暂存区Stage

$git commit -m "some instructions" #把文件提交到版本库,可以一次提交多个文件。实际上就是把暂存区的所有内容提交到当前分支
工作区 暂存区
0