廖雪峰git初学

一、基本指令
1.1:创建一个空的文件目录(这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。)
1.2:使用git init 来把这个目录变成Git可以管理的仓库
1.3:git add …用命令git add告诉Git,把文件添加到仓库(工作区->暂存区)
1.4: git commit告诉Git,把文件提交到仓库(暂存区->master分支)
1.5 git status命令可以让我们时刻掌握仓库当前的状态
1.6 git diff: 能看看具体修改了什么内容
1.7 git log 可以查看我们历史记录,从最近到最远的提交日志
1.8 git reset 会退到以前的版本 $ git reset --hard HEAD^:回退到上一个版本。
HEAD:当前版本
HEAD^ :上一个版本
HEAD^^ :上上个版本
HEAD^^^:上上上个版本
如果回退较多,比如上100个版本可以使用:HEAD~100

1.9 git reflog:记录每一次命令
2.0 git checkout :命令git checkout – readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。

2.1 git reset HEAD readme.txt :将提交到暂存区的文件撤销,重新回到工作区
2.2 git rm readme.txt :删除readme.txt文件,但是版本库还有该文件需要再次git commit -m “” 提交删除版本库中的该文件
2.3 git checkout --readme.txt:将删除的文件恢复到最新版本(从来没有被添加到版本库就被删除的文件,是无法恢复的!)

二、工作区和暂存区
在这里插入图片描述

三、远程仓库
3.1 ssh-keygen -t rsa -C “[email protected]”:在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

3.2 设置ssh-key:打开“Account settings”,“SSH Keys”页面:然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容,这样就将自己的电脑与github关联起来了

3.3 在github上创建一个仓库

3.4 git remote add origin [email protected]:michaelliao/learngit.git:将本地仓库与github仓库同步

3.5 $ git push -u origin master:第一次提交需要加上-u 将本地数据提交到远程仓库上

3.6 $ git push origin master:以后在本地提交后,直接使用该命令上传到远程仓库

四、分支操作
4.1 git checkout -b dev :创建一个dev分支,并切换到dev分支,相当于git branch dev(创建dev分支)和 git checkout dev(切换到dev分支)两条指令

4.2 git branch : 查看当前分支,命令会列出所有分支,当前分支前面会标一个*号。

4.3 git merge dev :将当前分支与dev分支合并

4.4 git branch -d dev :删除dev分支

4.5:推荐使用switch来创建、切换、删除分支 git switch -c dev(创建一个dev分支) git switch dev(切换到dev分支)

4.6:git merge --no-ff -m “merged bug fix 101” issue-101:使用–no-ff使用普通模式来合并分支,合并后可以通过git log查看合并记录

五、多人协同开发
多人协作的工作模式通常是这样:

首先,可以试图用git push origin 推送自己的修改;

如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

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

没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/。

六:遇到的问题
1.: failed to push some refs to ‘[email protected]:qweqqr/kings.git’
原因:我的问题是缺少了readme.md文件,重新添加一个就好了,在本地仓库创建一个readme文件,通过git add readme和git commit -m “提交readme文件” 就好

2.fatal: remote origin already exists.、
这是因为本地仓库已经关联了一个远程仓库,可以通过git remote rm origin先删除这个关联,再git remote add origin [email protected]:FBing/java-code-generator重新关联远程仓库

七、总结小点:
4.1 git add和git commit -m “”
使用命令git add ,注意,可反复多次使用,添加多个文件;
使用命令git commit -m ,完成。

4.2 git status和git diff
要随时掌握工作区的状态,使用git status命令。
如果git status告诉你有文件被修改过,用git diff可以查看修改内容。

2.3 git reset回退版本

回退版本后最新的那个版本已经看不到了!好比你从21世纪坐时光穿梭机来到了19世纪,想再回去已经回不去了,肿么办?
办法其实还是有的,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那次提交的的commit id是1094adb…,于是就可以指定回到未来的某个版本:但是这种方法只能使用于知道commit id的情况下,不知道就使用git reflog来查看每一个命令

HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本

2.4 为什么Git比其他版本控制系统设计得优秀?
因为Git跟踪并管理的是修改,而非文件。每次修改,如果不用git add到暂存区,那就不会加入到commit中。

2.5 git checkout – file命令中的–很重要,没有–,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。

2.6 git checkout --readme.txt和git reset HEAD readme.txt
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file。

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

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

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

2.8 远程仓库操作
要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;

2.9Git鼓励大量使用分支:因为分支只是创建一个新的指针,并修改指针指向,速度快

查看分支:git branch

创建分支:git branch

切换分支:git checkout 或者git switch

创建+切换分支:git checkout -b 或者git switch -c

合并某分支到当前分支:git merge

删除分支:git branch -d

3.0 合并冲突解决方法:当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。用git log --graph命令可以看到分支合并图。

3.1 针对bug的分支:修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;

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

在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick 命令,把bug提交的修改“复制”到当前分支,避免重复劳动

3.2 :开发一个新feature,最好新建一个分支;

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

猜你喜欢

转载自blog.csdn.net/weixin_44273311/article/details/107210138