Workspace
:工作区Index / Stage
:暂存区Repository
:仓库区(本地仓库)Remote
:远程仓库SVN
是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。而且集中式版本控制系统是必须联网才能工作。Git
是分布式版本控制系统,它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A
,其他人也在电脑上改了文件A
,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。官网:https://git-scm.com/downloads
最后两项建议选择:TrueType
字体让命令行中的文字更加清晰,每天检查更新保证你可以一直运行Git的最新版本。
Use a TrueType font in all console windows
在所有控制台窗口中使用TrueType
字体Check daily for Git for Windows updates
每天检查Git
是否有Windows
更新
如果需要对Unix
环境进行操作需要选择第三项,这样就可以在Windows
命令行中直接使用这些命令。
Use the OpenSSL library
:使用OpenSSL
库,服务器证书将通过ca-bundle.crt
文件验证。Use the native Windows Secure Channel library
:使用本地Windows
安全通道库,可以和企业环境更好的集成,便于和企业域中的证书认证方式一起工作。
Git
将使用Windows
的默认控制台窗口(“cmd.exe
”)
安装成功测试:
(1)桌面鼠标右键出现:Git Gui Here
、Git Bash Here
(2)win
键+r
键+输入cmd
打开windows
控制台,输入git --version
,出现:
测试成功则表明Git
安装成功。
For the latest stable version for your release of Debian/Ubuntu
sudo apt-get install git
For Ubuntu, this PPA provides the latest stable upstream Git version
sudo add-apt-repository ppa:git-core/ppa
sudo apt update
sudo apt install git
git
安装好之后去github上注册一个账号
配置用户名,将username
替换成github
用户名:
git config --global user.name "username"
配置邮箱,将[email protected]
替换成github
中保留的邮箱:
git config --global user.email "[email protected]"
查看配置是否成功:
git config --global --list
git config -e --global
git config --global --unset-all gui.recentrepo
ssh-keygen -t rsa -C "[email protected]"
[email protected]
替换成Github
中保留的邮箱。执行代码(三次回车)。
ssh保存公钥的文件所在路径:C:\Users\HN-DONG\.ssh\id_rsa.pub
桌面右键 -> Git Bash Here
-> cd ~/.ssh
cat id_rsa.pub
输出公钥,复制公钥
GitHub
,打开Settings
SSH and GPG keys
New SSH key
SSH Key
,Title
内容随意,将id_rsa.pub
中的公钥复制到Key
文本框,Add SSH Key
:Confirm password
确认密码版本库(repository
)又名仓库,即本地仓库,可以看做一个目录,这个目录里的所有文件都由Git
进行管理,目录中每个文件的修改、删除,Git
都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
git init
命令来初始化一个Git
仓库Git
使用git init
命令来初始化一个Git
仓库,在执行完成git init
命令后,Git
仓库会生成一个.git
目录(默认隐藏),这个目录是Git
用来跟踪管理版本的。有两种初始化的方式。git init
git init new-repository
使用git add
命令将需要加入版本控制的文件添加到暂存区。
git add . #添加目录中所有的文件到暂存区
git add [dir] #添加指定目录的文件到暂存区
git add *.txt #使用通配符,添加后缀为txt的文件
git add [file1] [file2] ... #添加指定的一个或多个文件到暂存区
git rm [file1] [file2] ... #删除工作区文件,并且将这次删除放入暂存区
git rm -f [file1] [file2] ... #如果工作区文件在删除之前修改过并且已经放到暂存区的话,必须要用强制删除选项 -f
git rm --cached [file] #停止追踪指定文件,从暂存区中删除文件,但该文件会保留在工作区
git mv [file-original] [file-renamed] #移动或重命名一个文件、目录、软连接,并且将这个变化放入暂存区
git status
命令用于查看在你上次提交之后是否有对文件进行再次修改。
git ls-files
查看已经存放在本地仓库的文件。
使用git commit
命令将添加到暂存区的文件提交到版本库。
git commit -m [注释可选] #提交暂存区的所有文件到版本库
git commit [file1] [file2] -m [注释可选] #提交暂存区的指定文件到仓库区
git commit -a -m [注释可选] #提交工作区自上次commit之后的变化,直接到仓库区,不需要执行git add命令
git commit -v #提交时显示所有diff信息
git commit --amend -m [message] #使用一次新的commit,替代上一次提交,如果代码没有任何新变化,则用来改写上一次commit的提交信息
git diff
命令比较文件的不同,即比较文件在暂存区和工作区的差异。
git diff
命令显示已写入暂存区和已经被修改但尚未写入暂存区文件的区别。
文件添加一行:hello world
git diff [file] #查看暂存区与工作区之间的差异
git diff --cached [file] #或 git diff --staged [file],显示暂存区与上一次提交(commit)之间的差异
git diff HEAD #查看已缓存的与未缓存的所有改动
git diff [first branch] [second branch] #查看两个分支之间的差异
git reset
命令用于回退版本,格式如下:
git reset [--soft | --mixed | --hard | --keep] [HEAD]
默认使用--mixed
,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件保持不变。
--soft
用于回退到某个版本。
--hard
用于重置暂存区与工作区,与上一次commit保持一致。
--keep
用于重置当前HEAD为指定commit,但保持暂存区和工作区不变
HEAD
说明:
HEAD 表示当前版本 #HEAD~0 表示当前版本
HEAD^ 上一个版本 #HEAD~1 上一个版本
HEAD^^ 上上一个版本 #HEAD^2 上上一个版本
以此类推...
git log #显示当前分支的版本历史
git log --stat #显示commit历史,以及每次commit发生变更的文件
git log -S [keyword] #根据关键词搜索提交历史
现在的情景是:我们在本地创建了一个Git
仓库(Repository
)后,又想在Github
创建一个Git远程仓库,即公网服务器上的仓库,并且希望这两个仓库进行远程同步,这样Github
的仓库既可以作为备份,又可以其他人通过该仓库来协作。
Github
,然后在右上角找到“New repository
”,创建一个新的仓库。Repository name
”填写要创建的Git仓库名称,其他默认,点击Create repository创建仓库。在本地仓库中运行指令:
git remote add origin [email protected]:Fintan-workspace/Test.git #Fintan-workspace/Test.git要替换成与本地仓库相关联的Github远程仓库,远程仓库命名为origin,这是Git默认的叫法,可以更改。
git remote -v #显示所有远程仓库
git remote show https://github.com/Fintan-workspace/Test #显示远程仓库的信息
git push
命令用于将本地的分支版本上传到远程仓库,指令如下:
git push <远程主机名> <本地分支名>:<远程分支名> #如果本地分支名与远程分支名相同,则可以写作:git push <远程主机名> <本地分支名>
git push --force <远程主机名> <本地分支名> #如果本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数
git push <远程主机名>--delete <远程分支名> #删除主机的分支可以使用 --delete 参数
由于远程仓库是空的,我们第一次推送master
分支时,加上了-u
参数,Git
不但会把本地的master
分支内容推送到远程仓库中新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令。
git push -u origin master
当你第一次使用Git
的clone
或者push
命令连接GitHub
时,会得到一个警告:
The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?
这是因为Git
使用SSH
连接,而SSH
连接在第一次验证GitHub
服务器的Key
时,需要你确认GitHub
的Key
的指纹信息是否真的来自GitHub
的服务器,输入yes
回车即可。
Git
会输出一个警告,告诉你已经把GitHub
的Key
添加到本机的一个信任列表里了:
Warning: Permanently added 'github.com' (RSA) to the list of known hosts.
这个警告只会出现一次,后面的操作就不会有任何警告了。
#本地目录可选,不设置默认为命令行对应的路径
git clone https://github.com/chaozh/awesome-blockchain-cn.git [本地目录]
git clone [email protected]:chaozh/awesome-blockchain-cn.git [本地目录]
分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。
git branch #查看分支,当前分支前会标一个 *
git branch new_branch #新建分支 new_branch
git checkout new_branch #切换到 new_branch 分支
git checkout -b new_branch #git checkout命令加上-b参数表示创建并切换
git merge new_branch#git merge 指令用于将 branch 分支与当前分支合并
git branch -d new_branch #git branch -d 指令删除 branch 分支
参考:1. Git使用教程,最详细,最傻瓜,最浅显,真正手把手教
2. 常用 Git 命令清单
3. Git远程仓库与分支管理
4. 廖雪峰老师的Git教程