参考文章:https://www.liaoxuefeng.com/ 想详细了解看原文
1、安装
https://git-scm.com/downloads git官网直接下载 或者网盘…
然后直接按提示一步步确定就可以了
2、安装完成后配置自己的身份验证
在开始菜单里找到“Git”->“Git Bash”,弹出对话框(可能在启动的时候会有找不到系统文件的错误提示,但好像不会有影响)就说明Git安装成功,运行下面两条命令创建你的帐户
git config --global user.name tangyuan
git config --global user.email 8686868@qq.com
注意git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,
当然也可以对某个仓库指定不同的用户名和Email地址。
3、创建版本库
①随便在一个盘下面建个文件夹(注意不要包含中文名),比如在E:/git/learngit,当然也可以直接在cmd下面用命令行创建
然后打开cmd,用cd进入你创建的learngit的文件下目录下。
②在cmd命令行下的这个文件夹下运行git init
(如果你安装git的时候按默认的安装,软件会自动帮你配置好环境变量,如果没有,在环境变量Path下面把git的环境变量加进去)
③编写一个.txt文件放在这个目录下比如(text.txt),不建议用windows自带的记事本,最好下载个notepad++(真的好用,不管是写文档还是用来看任何语言的代码都非常Nice)
④回到cmd,两个步骤把文件添加到仓库
(1)用命令git add告诉Git,把文件添加到仓库:
git add readme.txt
(2)用命令git commit告诉Git,把文件提交到仓库:
git commit -m "wrote a readme file"
运行上面这句之后可以看到下面这个信息,说明成功
[master (root-commit) eaadf4e] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 text.txt
-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
上面的两条命令add和commit如果了解数据库的就可以知道,add相当于数据库的很多操作,而commit相当于提交事务,所以在commit之前我们可以增加很多add比如:
git add file1.txt
git add file2.txt file3.txt
git commit -m "add 3 files."
4、版本回退功能
①假设我们现在继续在text.txt文件中增加
Creating a new branch is quick.
Git is a distributed version control system.
Git is free software.
然后运行git status
,这条命令可以让我们时刻掌握仓库当前的状态。我们可以看到如下的信息
On branch master
Changes not staged for commit:
(use “git add …” to update what will be committed)
(use “git checkout – …” to discard changes in working directory)
modified: readme.txt
no changes added to commit (use “git add” and/or “git commit -a”)
②现在你修改完了这个文档之后,跑去打了几盘王者荣耀,回来之后忘了你修改了什么内容。用git diff text.txt
可以查看你修改的情况,运行后你可以看到你的修改内容
diff --git a/readme.txt b/text.txt
index 46d49bf…9247db6 100644
— a/text.txt
+++ b/text.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
Git is free software.
其中的++++就是你增加的内容,----就是你删除的内容
③现在你又在你的text.txt大项目中进行了改BUG,改啊,改啊,改啊…
版本1:wrote a readme file
Git is a version control system.
Git is free software.
版本2:add distribute
Git is a distributed version control system.
Git is free software.
版本3:append GPL
Git is a distributed version control system.
Git is free software distributed under the GPL.
像这样你修改了很多次。
这时候你又跑去玩吃鸡了。回来之后,卧槽,我刚才改了什么,做了哪些修改。这时候你就可以用git log
命令来查看你的修改内容
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
Author: tangyuan 8686868@qq.com
Date: Fri May 18 21:06:15 2018 +0800
append GPL
commit e475afc93c209a690c39c13a46716e8fa000c366
Author: tangyuan 8686868@qq.com
Date: Fri May 18 21:03:36 2018 +0800
add distributed
commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: tangyuan 8686868@qq.com
Date: Fri May 18 20:59:18 2018 +0800
wrote a readme file
其中commit后面那串数字是你的版本号,这个可以要来以后你要回退到哪个版本中去。
④发现你今天修改的内容Bug比昨天的还多,想要回退到昨天的版本
git reset --hard HEAD^
HEAD is now at e475afc add distributed
用cat text.txt
查看文件的内容,是否回退到上一个版本。如果想要回退到任意版本,首先使用 git reflog
查看你的所有修改版本的信息。
e475afc HEAD@{1}: reset: moving to HEAD^^
1094adb (HEAD -> master) HEAD@{2}: commit: append GPL
e475afc HEAD@{3}: commit: add distributed
eaadf4e HEAD@{4}: commit (initial): wrote a readme file
其中前面这么一串数字就是你的每一版本,所以你现在就可以回退到任意版本的信息了git reset --hard e475
,版本号不必写全,写前面几位可以识别的就可以。
5、撤销未提交的修改
今天你还是在修改代码,一时之间bug太多很生气在注释里画了一只猪。然后执行了git add text.txt
添加到暂存区(关于暂存区请看原文讲解),突然你的同事看到了,让你赶紧撤回来,你就可以使用git check -- text.txt
来撤销暂存区的内容。
6、上传到远程仓库(看原文讲解,这里是直接连到github)
①首先创建一个github->个人头像下面有一个setting->SSH and GPG keys->new SSH key
其中title随便你取,而key要使用 ssh-keygen -t rsa -C"tangyuan@qq.com"
然后一直回车
然后就可以在你的C:\Users\Administrator下面有一个.ssh文件夹,里面有两个文件id_rsa和id_rsa.pub,id_rsa是私钥,不能泄露出去 id_rsa.pub是公钥,可以放心地告诉任何人。然后将id_rsa.pub的内容复制到SSH那个Key那一栏就可以了。
②创建一个仓库,还是在刚才的SSH and GPGkeys界面。在下面有一个Respositories->new Respositories,在Repository填上你的文件夹名称learngit,其他默认就可以了。
③关联本地库
git remote add origin git@github.com:tangyuanxixi/learngit.git
其中的tangyuanxixi改成你自己的github名称。
④然后就可以将你的本地内容推送到github上面去了 git push -u origin master
Counting objects: 20, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (20/20), 1.64 KiB | 560.00 KiB/s, done.
Total 20 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), done.
To github.com:michaelliao/learngit.git
* [new branch] master -> master
Branch ‘master’ set up to track remote branch ‘master’ from ‘origin’.
这样你上github看你刚才创建的仓库就可以看到你刚才上传的文件text.txt
7、创建新的分支
在前面的使用过程中,我们一直使用master这个分支,关于git在运行过程中的分支概念,和每次提交版本的head指向的细节查看参考文章的原文。
①创建分支dev并切换到这个分支
git checkout -b dev
Switched to a new branch ‘dev’
其中git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
git branch dev
git checkout dev
②用 git branch
查看分支
* dev
master
其中带有*号的是当前所处的分支。然后在这个分支修改文件,再将这个分支合并到master分支。总的流程如下
查看分支:git branch
创建分支:git branch
切换分支:git checkout
创建+切换分支:git checkout -b
合并某分支到当前分支:git merge
删除分支:git branch -d
所以我们一般不在master分支上面进行工作,而是在其他的分支比如dev,每个人都在自己的分支上面操作,最后再合并到master分支上面去
8.临时转移到新的分支
①当前你刚好在做一个分支上面的任务,比如dev,这时候你的主管告诉你赶紧先把手头的任务停一下,有一个Bug你先修改一下。但这个时候你的任务还没有完成,还不能提交,你又想创建一个新的分支issue-101来修改bug,这时候你就可以使用 git stash
来保存你当前还没有提交的分支,等以后恢复现场继续工作。
git stash
Saved working directory and index state WIP on dev: f52c633 add merge
②现在你就可以转到master分支,创建一个分支issue-101来修改Bug
git checkout master
Switched to branch ‘master’
Your branch is ahead of ‘origin/master’ by 6 commits.
(use “git push” to publish your local commits)
git checkout -b issue-101
Switched to a new branch ‘issue-101’
git add text.txt
git commit -m "fix bug 101"
[issue-101 4c805e2] fix bug 101
1 file changed, 1 insertion(+), 1 deletion(-)
然后将issue-101分支合并至master
git checkout master
Switched to branch ‘master’
Your branch is ahead of ‘origin/master’ by 6 commits.
(use “git push” to publish your local commits)
git merge --no-ff -m "merged bug fix 101" issue-101
Merge made by the ‘recursive’ strategy.
readme.txt | 2 ±
1 file changed, 1 insertion(+), 1 deletion(-)
③bug的任务改好了,回到dev分支,继续刚才的任务
git checkout dev
Switched to branch ‘dev’
git status
On branch dev
nothing to commit, working tree clean
查看我们的工作现场保存到哪里去
git stash list
stash@{0}: WIP on dev: f52c633 add merge
恢复,并自动删除stash
git stash pop
On branch dev
Changes to be committed:
(use “git reset HEAD …” to unstage)
new file: hello.py
Changes not staged for commit:
(use “git add …” to update what will be committed)
(use “git checkout – …” to discard changes in working directory)
modified: text.txt
Dropped refs/stash@{0}
(5d677e2ee266f39ea296182fb2354265b91b3b2a)
如果有多个临时保存,先查看
git stash list
stash@{0}: WIP on dev: f52c633 add merge
然后用指定的方式恢复
git stash apply stash@{0}
再删除指定stash
git stash drop stash@{0}
9、删除一个没有被合并过的分支
git branch -D <name>
10、多人协作
1、首先,可以试图用git push origin 推送自己的修改;
2、如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
3、如果合并有冲突,则解决冲突,并在本地提交;
4、没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。