git学习入门~~~

创建版本库(又名仓库,repository),可以理解为一个仓库,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。


创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录:

 
 
1.
$ mkdir learngit
$ cd learngit
$ pwd

2.
初始化一个Git仓库,使用git init命令。

3.
添加文件到Git仓库,分两步:

第一步,使用命令git add <file>,注意,可反复多次使用,添加多个文件;(多次add不同的文件)

第二步,使用命令git commit,完成。(commit可以一次提交很多文件)

4. 
随时掌握工作区的状态,使用git status命令。

如果git status告诉你有文件被修改过,用git diff可以查看修改内容。
5. 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
  要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
git reset --hard commit_id

git reset --hard head^(回到上一个版本)

git reset --hard 版本号(回到未来或过去都可以)

6. 只是指针在变化:


7. 版本库的管理


8. 为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件

9.  场景1:当你改乱了工作区某个文件的内容, 想直接丢弃工作区的修改时(还没add之前) ,用命令 git checkout -- file(--前后各有一个空格) 。git checkout -- readme.txt

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。git reset head readme.txt git checkout -- readme.txt

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

git  reset --hard  版本号

10. 

    vim test.txt(退出方式:i(表示插入),esc准备退出。ZZ,保存并退出;:q!(不保存退出)

     git add test.txt    git commit -m"add a new file"

    想要从版本库中删掉该文件:git rm test.txt, git commit -m"delete the test.txt"

命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容

11. 远程仓库:

要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;(git remote add origin ....)

关联后,使用命令git push -u origin master第一次推送master分支的所有内容;(git push -u origin master)

此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;(git push origin master)
分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步,真是太方便了!


12. 远程仓库的克隆:

要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。

Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快

13。 分支管理;

分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。

现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。

14. 创建合并分支:

Git鼓励大量使用分支:

查看分支:git branch(git branch)

创建分支:git branch <name>(git checkout -b dev)

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

合并某分支到当前分支:git merge <name>(git merge dev)

删除分支:git branch -d <name>(git branch -d dev)


15. 解决合并的冲突:

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

git log --graph命令可以看到分支合并图。


16. 不使用fast forword方式来合并分支:


17. bug分支管理:

修复bug时,我们可以通过创建新的bug分支进行修复,然后合并,最后删除;git checkout -b dev; git merge dev;

git checkout master;git branch -d dev

当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场

git stash ; git stash list; git stash pop;git stash list.

18. feature分支:

开发一个新feature,最好新建一个分支;git checkout -b dev; git add test.txt;git commit -m"add a test.txt";git checkout master;git merge dev之前

如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。git branch -D dev(强行删除)


19. 多人协作:

多人协作的工作模式通常是这样:

  1. 首先,可以试图用git push origin branch-name推送自己的修改;git push origin dev

  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;(如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name)git branch --set-upstream dev origin/dev;git pull

  3. 如果合并有冲突,则解决冲突,并在本地提交;

  4. 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!git push origin dev

这就是多人协作的工作模式,一旦熟悉了,就非常简单。

总结:

  • 查看远程库信息,使用git remote -v

  • 本地新建的分支如果不推送到远程,对其他人就是不可见的;

  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;

  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name本地和远程分支的名称最好一致;

  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name

  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

20. 创建标签
  • 命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;git tag v1.0 fedsf1

  • git tag -a <tagname> -m "blablabla..."可以指定标签信息;git tag -a v0.9 -m "add a new tag"

  • git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;

  • 命令git tag可以查看所有标签。


21. 操作标签

  • 命令git push origin <tagname>可以推送一个本地标签;git push origin v1.0

  • 命令git push origin --tags可以推送全部未推送过的本地标签;git push origin --tags

  • 命令git tag -d <tagname>可以删除一个本地标签; git tag -d v1.0

  • 命令git push origin :refs/tags/<tagname>可以删除一个远程标签git push origin :refs/tags/v1.0

22. 使用github

  • 在GitHub上,可以任意Fork开源仓库;fork之后使用:git clone [email protected]:linhj-james/learngit-1.git

    [email protected]:linhj-james/learngit-1.git
    [email protected]:linhj-james/learngit-1.git
  • 自己拥有Fork后的仓库的读写权限; pull request

  • 可以推送pull request给官方仓库来贡献代码。

23. 最后,供上版本管理常用命令:


git clone [email protected]:linhj-james/learngit.git(你的远程地址)

git init (初始化一个新建的仓库)


git status (所在文件夹的文件状态)

git diff(显示两次文件的修改的不同之处)

git add (+filename)

git commit -m"add some chages"


git log(显示记录)


git branch (查看分支)

git checkout -b dev(新建并切换到另一个分支dev分支去)

git branch master (切换到master分支去)

git branch -d dev(删除dev分支)、

git tag v1.0(贴上v1.0的标签)



git remote -v(查看远程里连接的状态)

(git remote add origin (远程仓库地址))

git remote show <remote>(显示remote的信息)

git pull <remote><branch>(看上面)

git fetch <remote>

git push <remote><branch>(git push origin maste)



git merge <branch>(dev)

git rm <resolved files>


git reset --hard head^

自己总结一下常用 的操作:

一。 . 上传本地文件到github

步骤:

1. 先各自在远程仓库和本地仓库建一个文件夹(仓库)

2. git init(初始化仓库)

3. git add (+文件名)

4. git commit -m"add a new file"

5.git remote -v(查看远程仓库的连接情况,把无关的git remote rm origin(移出掉))

6. git remote add origin (+远程仓库地址)(建立远程仓库)

7. git pull --rebase origin master

git pull = git fetch + git merge

git pull --rebase = git fetch + git rebase(创建一个新的虚拟提交R)(关于git merge和git rebase 的区别可以参考:https://www.cnblogs.com/kevingrace/p/5896706.html)


8. git push -u origin master(有时候会出错,如果排除7的问题可以使用:git push -f origin master(利用本地分支去覆盖远程仓库))


二。 克隆:

git clone (+远程仓库地址)


https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013744142037508cf42e51debf49668810645e02887691000(转载博文)



猜你喜欢

转载自blog.csdn.net/weixin_37766296/article/details/80050986