git使用步骤和总结

配置用户名密码

git config --global user.name "username"    #名字可随便取
git config --global user.email "[email protected]"   #填个人邮箱

创建本地仓库

 mkdir gitlearn创建目录
cd gitlearn
git init把目录建成仓库

一、添加文件

编写readme.txt,内容如下:
Git is a version control system.
Git is free software.
放在gitlearn目录下

git add readme.txt      #把文件添加到仓库
git commit -m "wrote a readme file"     #告诉Git,把文件提交到仓库 #如果修改readme.txt,再次add commit即可,
git diff readme.txt         #可查看作出什么修改 ,
git status      #在commit之前查看仓库状态
git log          #查看commit历史记录

二、删除文件

git add test.txt
git commit -m "add test.txt"
rm test.txt #删除文件
git rm test.txt #从版本库删除
git commit -m "remove test.txt"

三、添加远程库

ssh-keygen -t rsa -C "100000@qq.com"    #生成公钥/密钥

在Github创建空仓库gitlearn

 git remote add origin git@github.com:YourGithub/gitlearn.git       #本地库关联远程库
 git push -u origin master  #本地库内容推送到远程库 #

把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。#由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
从现在起,只要本地作了提交,就可以通过命令:
$ git push origin master
把本地master分支的最新修改推送至GitHub,现在,就拥有了真正的分布式版本库!
小结
要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步,真是太方便了!


四、从远程库克隆到本地库

github新建仓库gitskills,并勾选生成readme文件
现在,远程库已经准备好了,下一步是用命令git clone克隆一个本地库:
$ git clone [email protected]:YourGithub/gitskills.git #会生成目录gitskills(本地库),远程库的内容都会克隆下来


五、创建与合并分支
git checkout -b dev = git branch dev + git checkout dev
git branch #查看当前分支
修改readme.txt文件,然后提交git add readme.txt + git commit -m “branch test”
git checkout master #切换回master分支 #查看readme.txt,刚刚添加的内容不见了,因为那个修改在dev分支上
git merge dev #把dev分支的工作成果合并到master分支上,再看readme.txt,就可以看到,和dev分支的最新提交是完全一样的。*合并需要先切回master分支再才能合并
git branch -d dev #合并后,删除dev分支
小结
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch
切换分支:git checkout
创建+切换分支:git checkout -b
合并某分支到当前分支:git merge
删除分支:git branch -d


六、解决合并冲突
git checkout -b feature1 #创建分支feature1,在里面修改readme.txt,”Creating a new branch is quick AND simple.”,在最后一行加上AND simple
git add readme.txt
git commit -m “AND simple” #提交内容
git checkout master #切换到master分支
在master分支上把readme.txt文件的最后一行改为:
Creating a new branch is quick & simple.
提交:
git add readme.txt
git commit -m “& simple”
现在,master分支和feature1分支各自都分别有新的提交
这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,我们试试看:
git merge feature1
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.
果然冲突了!Git告诉我们,readme.txt文件存在冲突,必须手动解决冲突后再提交。
我们可以直接查看readme.txt的内容:

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1

Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们修改如下后保存:
Creating a new branch is quick and simple.
再提交:
git add readme.txt
git commit -m “conflict fixed”
最后,删除feature1分支:
$ git branch -d feature1

小结
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
用git log –graph命令可以看到分支合并图。


七、分支管理策略
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
下面我们实战一下–no-ff方式的git merge:
首先,仍然创建并切换dev分支:

git checkout -b dev
修改readme.txt文件,并提交一个新的commit:
git add readme.txt
git commit -m “add merge”
现在,我们切换回master:

git checkout master
准备合并dev分支,请注意–no-ff参数,表示禁用Fast forward:
git merge –no-ff -m “merge with no-ff” dev
因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
合并后,我们用git log看看分支历史


八、Bug分支
stask功能
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。
修复完bug后,回到dev分支,
git stash list
stash@{0}: WIP on dev: 6224937 add merge
工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了
你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:
git stash apply stash@{0}

小结
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

猜你喜欢

转载自blog.csdn.net/Mr_Ystreet/article/details/80343605