Git 教程html
git init
git
初次建立须要先把全部的文件先 git add -A
,添加到缓存区,而后 git commit -m "init commit"
提交到本地仓库,以后就能够为所欲为建立分支。github
$ git version
git version 2.16.0.windows.2
复制代码
简单查看shell
$ git status -s
M a
A "\345\267\245\344\275\234\346\270\205\345\215\225.txt"
复制代码
详细查看vim
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: "\345\267\245\344\275\234\346\270\205\345\215\225.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: a
复制代码
添加新文件到暂存区windows
git add "工做清单.txt"
缓存
git add (文件A) (文件B)...
bash
git add .
,git add -A
,git add --all
添加全部的文件ssh
查看不一样编辑器
git diff
git diff --cached
git diff HEAD
,git diff HEAD (文件名)
git diff --stat
取消已经缓存的内容
git reset HEAD (文件名)
提交到本地库
git commit -m '第一次版本提交'
若是你没有设置 -m 选项,Git 会尝试为你打开一个编辑器以填写提交信息。
git log -1
查看最新的提交信息:
回滚提交
git reset --hard f4f7dae5f1b48a05afed1d54160e1f28329083b8
回滚提交到 f4f7dae5f1b48a05afed1d54160e1f28329083b8,而且抛弃这里提交以前全部的提交
切换到某次提交
git checkout f4f7dae5f1b48a05afed1d54160e1f28329083b8
切换只是切换Head指针,并不会回滚提交,更不会抛弃提交。
本地要先生成对应的公钥私钥。
ssh-keygen -t rsa -C "youremail@example.com"
cd ~/.ssh
找到里面的 id_rsa,复制里面的 key 到远程库中
测试:
$ ssh -T git@github.com
Hi ChestnutPlus! You've successfully authenticated, but GitHub does not provide shell access. 复制代码
查看远程仓库
git remote
添加一个远程仓库
git remote add [name] [url]
删除指定的远程
git remote rm [name]
从远程仓库中抓取
git fetch [remote-name]
:这个命令会访问远程仓库,从中拉取全部你尚未的数据。 执行完成后,你将会拥有那个远程仓库中全部分支的引用,能够随时合并或查看。它并不会自动合并或修改你当前的工做。当准备好时你必须手动将其合并入你的工做。
查看分支
$ git branch
branchA
* master
复制代码
分支后面有星号*的表明是当前的分支
新建分支
git branch (branchName)
切换分支
git checkout (branchname)
:当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工做目录的内容
git checkout -b (branchname)
:建立新分支并当即切换到该分支下
删除分支
git branch -d (branchname)
分支合并
git merge (branchname)
合并(branchname)到当前分支中
合并冲突
$ git merge branchA
Auto-merging a
CONFLICT (content): Merge conflict in a
Automatic merge failed; fix conflicts and then commit the result.
复制代码
当有冲突的时候,会提示 Automatic merge failed,咱们须要先解决冲突再提交。冲突的文件提示在输出里面,咱们须要对这些文件进行处理冲突。
$ git diff a
diff --cc a
index c9109a0,b2eabc7..0000000
--- a/a
+++ b/a
@@@ -1,4 -1,4 +1,8 @@@
今天你吃饭没?
++<<<<<<< HEAD
+ccccccccccccccccccc
++=======
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
++>>>>>>> branchA
复制代码
查看冲突,git diff (文件)
查看冲突的文件,最底下有写着冲突的地方和所对应的分支。手动打开对应的文件,发现有以下的,而后手动编辑,解决冲突。
今天你吃饭没?
<<<<<<< HEAD
ccccccccccccccccccc
=======
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
>>>>>>> branchA
复制代码
解决完成后,咱们须要主动告诉Git咱们已经解决好冲突了
$ git status -s
UU a
$ git add a
$ git status -s
$ git commit
[master 106ee75] Merge branch 'branchA'
复制代码
查看当前分支的提交历史
git log
git log -10
后面的数字表示查看最新的10条提交
能够用 --oneline 选项来查看历史记录的简洁的版本
git log --oneline
能够用 --reverse 来逆向查看提交
git log --oneline --reverse
查看日志以图形
git log --graph
查看到HEAD的全部提交
git log --graph -2
git log --graph --all
查看全部的提交
git log --graph --all -2
查找特定用户的提交
git log --author=Chestnut --oneline
制定日期时间
若是你要指定日期,能够执行几个选项:--since 和 --before,可是你也能够用 --until 和 --after。
git log --oneline --before={1.week.ago} -2
查看1周以前的提交,限制2git log --oneline --before={1.week.ago} --after={2019-02-18} -5
查看1周以前,且在2-18后的提交,取5个移除该文件的版本控制,不会删除该文件。
git rm --cached -r 文件名
全局忽略文件
git config --list
一堆配置输出,查看是否有 core.excludesfile=/Users/lxy/.gitignore_global,有就打开编辑,把想要忽略的文件编辑上,而后退出。没有这个文件就手动生成。
git config --global core.excludesfile "/c/Users/80253144/.ssh/globalGitIgnore"
项目自身的忽略文件
直接在对应的.git的相同目录下,新建 .gitignore 文件,里面编辑便可。
【参考】
初次建立须要先把全部的文件先 git add -A
,添加到缓存区,而后 git commit -m "init commit"
提交到本地仓库,以后就能够为所欲为建立分支。。
【参考】
通常,咱们使用 git fetch
查看更新,而后使用 git merge origin/master
,结果报错:fatal: refusing to merge unrelated histories(拒绝合并不相关的历史)。
出现这个问题的最主要缘由仍是在于本地仓库和远程仓库其实是独立的两个仓库。因此,咱们用这个命令:git pull origin master --allow-unrelated-historie
【参考】
如上图的分支所示,origin/master 是远程仓库,跟原来本地的仓库是两个独立的仓库,以后咱们合并到本地分支上,就变成如上图所示的样子。而后,咱们想把 origin/master 合并到 head 去,git push origin
结果报标题的错。git push
时通常会上传到origin下的master分支上,然而当repository和branch过多,而又没有设置关联时,git就会产生疑问,由于它没法判断你的push目标。这里就是远程有一个 master,本地也有一个master,因此咱们须要先指定:git push --set-upstream origin master
:
看到最后一句:Branch 'master' set up to track remote branch 'master' from 'origin'.
,分支 master 设置跟踪远程的分支 master。
//下载origin仓库的master分支代码
$ git fetch origin master
//比较本地的仓库和远程参考的区别
$ git log -p master.. origin/master
//origin合并到本地仓库master
$ git merge origin/master
复制代码
或者
//从远程的origin仓库的master分支下载到本地并新建一个分支temp
$ git fetch origin master:temp
//比较master分支和temp分支的不一样
$ git diff temp
//合并temp分支到master分支
$ git merge temp
//删除temp
$ git branch -d temp
复制代码
查看区别:
//显示出全部有差别的文件列表
git diff origin/master master --stat
//显示指定文件的详细差别
git diff branch1 branch2 <具体文件路径>
//显示出全部有差别的文件的详细差别
git diff branch1 branch2
复制代码
固然,若是有冲突,你就必需要解决冲突,才能合并。
git merge origin/master
:尝试合并分支的时候,出现了冲突
$ git merge origin/master
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.
复制代码
git diff README.md
:查看具体的冲突位置:
$ git diff README.md
diff --cc README.md
index 5171bc4,34e6fe1..0000000
--- a/README.md
+++ b/README.md
@@@ -2,4 -2,6 +2,10 @@@
++<<<<<<< HEAD
+使得开发商;杜可风;斯达康;了
++=======
+ TEst使得开发商;杜可风;
+
+ 2019年3月29日12:08:13,我作了修改。
++>>>>>>> origin/master
复制代码
vim README.md
:手动解决冲突
解决完成后,咱们须要主动告诉Git咱们已经解决好冲突了
$ git status -s
UU README.md
复制代码
$ git add README.md
复制代码
$ git status -s
M README.md
复制代码
$ git commit
[master 8dac097] Merge remote-tracking branch 'origin/master'
复制代码
把结果告知远程仓库
$ git push origin
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 991 bytes | 495.00 KiB/s, done.
Total 6 (delta 0), reused 0 (delta 0)
To github.com:ChestnutPlus/GitTest.git
61c3123..2f5987d master -> master
复制代码