设置SSH Key密匙 以后push不需要每次输入账户密码
-ssh-keygen -t rsa -C "账户邮箱"
$ ssh-keygen -t rsa -C "619025283@qq.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/ Administrator/.ssh/id_rsa):
/c/Users/Administrator/.ssh/id_rsa already exists.
Overwrite (y/n)? y
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. //公匙
The key fingerprint is:
SHA256:wGaLMA4C6nBA9CvAP6Zw1f1d7od3U4N1ELwJfw/QrtI 619025283@qq.com
The key's randomart image is:
+---[RSA 2048]----+
|=o oo. |
|+.. o . o o. |
|*.+.. * . =.+.|
|=+.+.+ o . . oO o|
|.oo=. . S ...o.+o|
|..+ . . E. .+|
| . . o.+|
| oo|
| |
+----[SHA256]-----+
-$ ssh -T git@github.com //测试是否认证成功
Enter passphrase for key '/c/Users/Administrator/.ssh/ id_rsa':
Hi zhangzn3! You've successfully authenticated, but GitHub does not provide shell access.
git clone <版本库的地址>
$ git clone https://github.com/zhangzn3/test.git
Cloning into 'test'...
warning: You appear to have cloned an empty repository.
git clone <版本库的地址> <本地目录名>
$ git clone https://github.com/zhangzn3/test.git halo
Cloning into 'halo'...
warning: You appear to have cloned an empty repository.
git add <需要添加的文件> 将文件添加到暂存区域(tracked area)
-git add path 添加指定的目录文件,path为"."则表示当前目录文件
-git add -u 只将tracked文件中被修改过或已删除文件的信息添加到索引库。它不会处理untracted的文件
git commit -m "描述信息" 将索引内容提交到本地仓库中
-git commit -m "描述信息" 一般要先git add,然后再git commit,
-git commmit -a -m "描述信息" 如果只是提交被修改或者被删除的且已经被git管理(就是已经加入到索引的)文件,可以不用先git add,直接使用 -a参数进行commit,相当于合并了 git add
$ git commit -a -m'modify sample.txt'
[master bcecc6f] modify sample.txt
1 file changed, 1 insertion(+)
git branch 分支操作
-git branch 查看本地分支,当前分支的前面加“*”号标记
-git branch -r 查看远程分支
-git branch -a 查看本地及远程分支
-git branch -d local-branch 删除本地分支
$ git branch -d origin
Deleted branch origin (was 714e9b8).
git push 推送操作
-git push <远程主机名> <本地分支名>:<远程分支名>
$ git push origin b2:b2 推送本地b2分支到origin主机的b2分支
Username for 'https://github.com': zhangzn3
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/zhangzn3/test.git
* [new branch] b2 -> b2
-git push origin local-branch 这里省略远程分支名,表示推送本地分支local-branch到origin主机同名分支,如果没有同名的远程分支,则新建一个分支
-git push origin :remote/branch 这里省略本地分支名,表示推送一个空分支到远程分支,相当于删除该远程分支
$ git push origin :b1
Username for 'https://github.com': zhangzn3
To https://github.com/zhangzn3/test.git
- [deleted] b1
-git push origin --all 推送本地所有分支到远程主机
$ git push origin --all
Username for 'https://github.com': zhangzn3
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/zhangzn3/test.git
* [new branch] b1 -> b1
* [new branch] b2 -> b2
* [new branch] b5 -> b5
git pull 更新操作
-git pull <远程主机名> <远程分支名>:<本地分支名> 注:跟git push 远程分支:本地分支参数位置相反
$ git pull origin b2:b2
Already up-to-date.
-git pull origin remote-branch 这里省略本地分支,表示从远程分支更新数据到当前分支
$ git pull origin b2
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/zhangzn3/test
* branch b2 -> FETCH_HEAD
a7dc974..6082709 b2 -> origin/b2
Updating a7dc974..6082709
Fast-forward
sample2.txt | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
git checkout 检出操作
-git checkout branch-name 检出(切换)分支
-git checkout -b branch-name 新建分支并切换到该分支
$ git checkout -b b5
Switched to a new branch 'b5'
$ git checkout - //返回上一个分支
Switched to branch 'b1'
Your branch is ahead of 'origin/b1' by 9 commits.
(use "git push" to publish your local commits)
手动建立跟踪关系(--set-upstream),这样可以在push pull时省略本地分支和远程分支参数
-git branch --set-upstream local-branch remote-branch 关联本地分支和远程分支
$ git branch --set-upstream b2 origin/b2
The --set-upstream flag is deprecated and will be removed. Consider using --trac k or --set-upstream-to
Branch b2 set up to track remote branch b2 from origin.
$ git push
Username for 'https://github.com': zhangzn3
Counting objects: 2, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 227 bytes | 0 bytes/s, done.
Total 2 (delta 0), reused 0 (delta 0)
To https://github.com/zhangzn3/test.git
d600893..ff30992 b2 -> b2
git stash 储藏操作
-git stash 储藏当前修改
-git stash list 查看储藏的列表信息
-git stash pop 或者 git stash apply 还原上一次的储藏
-git stash pop | apply stash@{idx} 还原到指定的储藏
-git stash clear 清空储藏列表
当前分支内容发生修改,这时候需要切换到其他分支工作,git会提示切换之前有两个选择:先commit或者stash当前分支修改的内容,如果不想commit,可以使用stash将修改储藏起来,等再切换回来时可以再还原回来以前修改的内容.
$ git checkout b1 切换时出现错误提示
error: Your local changes to the following files would be overwritten by checkout:
3.txt
Please commit your changes or stash them before you switch branches.
Aborting
$ git stash 执行储藏操作
Saved working directory and index state WIP on b2: ff30992 3
HEAD is now at ff30992 3
$ git checkout b1 这个时候可以切换成功了
Switched to branch 'b1'
Your branch is up-to-date with 'origin/b1'.
$ git stash apply 再切换回到b2时,可以还原到以前储藏的内容
On branch b2
Your branch is up-to-date with 'origin/b2'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: 3.txt
no changes added to commit (use "git add" and/or "git commit -a")
git status 查看仓库的状态
-git status 查看状态信息 有以下几种状态
$ git status
On branch b1
Your branch and 'origin/b1' have diverged,
and have 8 and 1 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Changes to be committed: //新提交的文件
new file: b4.txt
Unmerged paths: //未合并的文件
(use "git add <file>..." to mark resolution)
both modified: b1.txt
//有修改, 但是没有被添加到暂存区的文件
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: b2.txt
Untracked files: //没有加入版本控制的文件 没有add的文件
(use "git add <file>..." to include in what will be committed)
b3.txt
git log 查看提交日志
查看什么人在什么时候进行了提交或者合并,以及前后的差别
-git log
$ git log
commit 5747b585fda93a0d1cc84e0f9c6b3f5924b78973
Author: zhangzn3 <619025283@qq.com>
Date: Wed Oct 25 14:41:29 2017 +0800
$ git log --pretty=oneline 显示简述信息
5747b585fda93a0d1cc84e0f9c6b3f5924b78973 111
f091b8f2f2cec797e3d2c40cbfcf3f14a589b34c 12121212
073a0a22d7a4cc57ff0e459753ce81a8a62dc124 Merge branch 'b2' into b1
-git log xx.txt 只显示指定文件的日志
-git log -p 显示文件的改动
-git log -p b2.txt 显示指定文件的改动
$ git log -p b2.txt
commit 8d7c3e6be5a7a46cc3b598c81bb53c95acce825a
Author: zhangzn3 <619025283@qq.com>
Date: Wed Oct 25 10:38:21 2017 +0800
b2
diff --git a/b2.txt b/b2.txt
index 76fd2b8..7c229bf 100644
--- a/b2.txt
+++ b/b2.txt
@@ -1 +1 @@
-<CE><D2><CA><C7>b2
No newline at end of file
+b2b2b2
No newline at end of file
-git log --graph 以图表形式查看分支
git log和git reflog区别
git log 只能查看当前状态为终点的历史日志
git reflog 查看当前仓库的操作日志,可以看到回溯前的版本hash
$ git reflog
5747b58 HEAD@{0}: reset: moving to 5747b5
5747b58 HEAD@{1}: reset: moving to 5747b585fda93a0d1cc84e0f9c6b3f5924b78973
cf456a3 HEAD@{2}: reset: moving to HEAD
cf456a3 HEAD@{3}: checkout: moving from b3 to b1
cf456a3 HEAD@{4}: checkout: moving from b1 to b3
git diff 查看工作树和暂存区前后的差别
$ git diff
diff --cc b1.txt
index 9db4b82,93ee6ac..0000000
deleted file mode 100644,100644
--- a/b1.txt
+++ /dev/null
diff --git a/33/66.txt b/33/66.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/b2.txt b/b2.txt
deleted file mode 100644
index 7c229bf..0000000
--- a/b2.txt
+++ /dev/null
@@ -1 +0,0 @@
-b2b2b2
No newline at end of file
diff --git a/b4.txt b/b4.txt
deleted file mode 100644
index e69de29..0000000
git diff 查看工作树和最新提交前后的差别
HEAD指向当前分支中最新一次提交,最好每次commit之前先执行该命令查 看本次提交和上次提交有什么差别
git reset 回溯历史版本
$ git log --pretty=oneline 先查看提交日志
5747b585fda93a0d1cc84e0f9c6b3f5924b78973 111
f091b8f2f2cec797e3d2c40cbfcf3f14a589b34c 12121212
073a0a22d7a4cc57ff0e459753ce81a8a62dc124 Merge branch 'b2' into b1
0a6eb13c1a429f1de55229bd31461d8056a022cd 1212
$ git reset --hard 5747b5 版本hash //回溯到某个版本
HEAD is now at 5747b58 111
conflict冲突解决
$ git pull
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/zhangzn3/test
4319f32..89ab451 b1 -> origin/b1
Auto-merging b1.txt
CONFLICT (content): Merge conflict in b1.txt //出现冲突
Automatic merge failed; fix conflicts and then commit the result. //自动合并失败
//打开有冲突的文件
<<<<<<< HEAD //当前的内容
我是哈哈哈
=======
12121214234234234212 //要合并的内容
>>>>>>> 89ab451b10d42ed559dba38950b2665ccc2eb64b
//解决冲突后进行add和commit解决结果
$ git commit -a -m'resolve conflict'
[b1 9c4d232] resolve conflict
github上的gist功能 可以放一些代码片段
文件名称包含扩展名(自动识别扩展名)