windows:
git下载地址:
https://git-for-windows.github.io/
安装完成后,输入命令行做最后一步设置:
$ git config --global user.name "Your Name" $ git config --global user.email "email@example.com"
创建版本库,选择自己想放置的盘,输入下面命令(learngit为版本库名,建议英文)
$ mkdir learngit
$ cd learngit
$ pwd
输入下面指令把这个目录变成git可以管理的仓库
$ git init
把要保存到库的文件放在learngit目录下或子目录下
使用下面命令保存到暂存区
$ git add readme.txt
使用下面命令告诉git,把文件提交到仓库
$ git commit -m "wrote a readme file"
其中-m后面输入的是本次提交的说明
若想查看仓库的修改情况或者状态,可输入下面命令
$ git status # On branch master # 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: readme.txt # no changes added to commit (use "git add" and/or "git commit -a")
上面信息告诉我们,readme.txt被修改过,具体要看修改过说明内容,可输入以下指令
$ git diff readme.txt
若想看历史记录,可输入以下指令
$ git log
若想看简洁一点的,可输入以下指令
$ git log --pretty=oneline
在git中,HEAD表示当前版本,上个版本是HEAD^,上上个则是HEAD^^,更多则可以写成HEAD~100。若想回退上一个版本,则可输入下面指令
$ git reset --hard HEAD^
若想看看版本内容,可输入下面指令
$ cat readme.txt
若想回退指定版本,需要指晓commit_id,可输入以下指令
$ git reset --hard 3628164
若想查看每一次指令,可输入
$ git reflog
输入以下指令可丢弃工作区的修改
$ git checkout -- readme.txt
若想把暂存区的修改撤销掉重新放回工作区,可用命令
$ git reset HEAD readme.txt
使用以下命令删除文件
$ rm test.txt
远程仓库:
在用户主目录下(C盘/用户/xxx),查看有没.ssh目录,再继续查看有木有id_rsa和id_rsa.pub这两个文件,若有则可跳过下一步,否则则输入以下命令,创建SSH Key
$ ssh-keygen -t rsa -C "youremail@example.com"
一般不设置密码
接着登录github,打开Accout settings,SSH Keys页面,点Add SSH Key,填title,在Key文本框里面粘贴id_rsa.pub文件的内容,点击Add Key,完成。
添加到远程库
在github上添加一个仓库后,可使用以下命令把本地仓库与之关联
$ git remote add origin git@github.com:githubname/learngit.git
githubname必须要替换成自己的github账户名
将本地库的所有内容推送到远程库上,使用以下代码:
$ git push -u origin master
SSH警告
当第一次使用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回车即可。
从远程库克隆
输入以下命令,可以在github上克隆一个仓库到本地库
$ git clone git@github.com:githubname/gitskills.git
githubname为github的账户名,gitskills是github上面的一个仓库的名字
创建分支
使用以下命令创建分支并切换到分支上
$ git checkout -b dev Switched to a new branch 'dev'
-b参数表示创建并切换,相当于以下两条命令
$ git branch dev $ git checkout dev Switched to branch 'dev'
查看当前分支使用以下命令
$ git branch * dev master
该命令会列出所有分支,当前锋分支前面会表*号
以下命令用户合并指定分支到当前分支
$ git merge dev Updating d17efd8..fec145a Fast-forward readme.txt | 1 + 1 file changed, 1 insertion(+)
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
当git无法自动合并分支时,就必须首先解决冲突,再提交,合并完成
用以下命令可以看到分支合并图
$ git log --graph
使用以下命令表示禁用Fast forward
$ git merge --no-ff -m "merge with no-ff" dev
dev表示分支
使用以下明林可查看分支历史
$ git log --graph --pretty=oneline --abbrev-commit * 7825a50 merge with no-ff | | * 6224937 add merge |/ * 59bc1cb conflict fixed
合并分支时,加上--no-ff参数可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而Fast forward合并就看不出来曾经做过合并。
bug分支
Git还提供了一个stash
功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:
$ git stash Saved working directory and index state WIP on dev: 6224937 add merge HEAD is now at 6224937 add merge
现在,用git status
查看工作区,就是干净的(除非有没有被Git管理的文件),因此可以放心地创建分支来修复bug。
使用以下命令查看工作现场
$ git stash list stash@{0}: WIP on dev: 6224937 add merge
工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用git stash apply
恢复,但是恢复后,stash内容并不删除,你需要用git stash drop
来删除;
另一种方式是用git stash pop
,恢复的同时把stash内容也删了:
$ git stash pop # On branch dev # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: hello.py # # 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: readme.txt # Dropped refs/stash@{0} (f624f8e5f082f2df2bed8a4e09c12fd2943bdd40)
再用git stash list
查看,就看不到任何stash内容了:
$ git stash list
你可以多次stash,恢复的时候,先用git stash list
查看,然后恢复指定的stash,用命令:
$ git stash apply stash@{0}
未完,待续...