1.什么是Git
一个优秀的,流行的,开原免费的,分布式版本控制系统。
2.创建本地git仓库并添加文件
什么时候需要连网络:彼此改的代码需要同步的时候
分布式的时候,会找一台电脑作公共服务器,来交换彼此的修改。
a.创建本地仓库
mkdir /root/test ; cd /root/test ;
git init 多了一个.git的文件夹,里面有很多东西
b.创建文件,使用git status让我们看我当前仓库的状态,这里告诉我们有一个没有被追踪的文件。
touch 1.txt
git status
c.用git add告诉git,把文件添加到仓库管理列表
git add 1.txt 没有提示报错,liunx创始人观点,没有消息就是好消息
git status 状态不同了,告诉我们可以提交的状态
d.用git commit 告诉git,把文件提交到本地仓库! -m后面的内容是添加提交注释
[root@node02 test]# git config –global user.email “root@localhost”
[root@node02 test]# git config –global user.name “root” 我第一次提交他要让我做这两步骤
git commit -m “增加文件1.txt”
git status 无文件要提交,干净的工作区一id等信息
e.用git log查提交日志,会告诉我们没有其他需要提交了,都是最新的仓库文件了.会有唯一id等信息
git log
git log –pretty=oneline 一行显示更加简洁
3.修改文件
工作区—>暂存区(运行git add)—>版本库
工作区要先运行git add把修改放到暂存区,才可以运行git commit把修改添加到版本库
a.本地修改1.txt文件,加入内容“第一次修改文件“
git staus 会告诉你修改了1.txt文件的,红色的
git add 1.txt git和svn不一样的地方,不能直接commit,还要需要重新add一次,才可以是处于提交的状态???svn好像也要add
git commit -m “第一次修改!”
git log 会有两条记录,从下到上记录,上面那条是说你修改
4.撤销修改
修改文件内容写错了
1.此时还没有add,然后看git status,会告诉你用git checkout — 文件名 废弃工作区的修改
git checkout — 1.txt
2.如果做了add后,然后看git staus,
会告诉你用git reset HEAD 文件名 把暂存区的修改撤销,
然后 git checkout — 文件名 废弃工作区的修改
git reset HEAD 1.txt
git checkout — 1.txt
3.引出不仅仅add,还commit了的话,可以使用版本回退
——————–
git mv 移动
git diff 比较不同
——————–
5.版本回退
加入“哎呀写错了,还commit了”,然后做版本回退
HEAD 当前本
HEAD^ 上个版本
HEAD^^ 上上个版本
HEAD~100 上100个版本
恢复到上一个版本
git reset –hard HEAD^
再看日志,会发现log会少一条。实际是没有删除哪个版本,可以用git reflog 看到
git log –pretty=oneline
git reflog 用这个来记录每一次命令的
发现之前没有写错,但是回退了,想要恢复刚才回退前
git版本回退熟读非常快,因为git再内部有个指向当前版的HEAD头指针,当你退回版本的时候,git仅仅是把head移动。
git reflog 里面可以看到唯一标识字符串
git reset –hard 4879cb4 (唯一标识字符串)
6.删除文件
增加一个2.txt,或删除1.txt然后add,commit到版本库
a.工作区里面直接删除2.txt(自己误删除),然后git status查看会提示你git check — 文件名 废弃工作区的改动
git checkout — 2.txt
b.版本库 里面删除 2.txt 的管理, git rm 操作后工作区的文件也会删除的。
情况1:这时发现删除错了,还没commit
—————————-
git rm 2.txt
输入git status会提示你git reset HEAD 文件 还可以撤销暂存区的操作.
git reset HEAD 2.txt
输入git status会提示你git checkout — 文件 可以撤销工作区的操作,这时候文件就复原了。
git checkout — 2.txt
——————————-
情况2:真的是确定要删除2.txt
git rm 2.txt
git commit -m “删除2.txt”
还是可以用本版回滚滚掉的
7.克隆远程仓库,并提交本地修改
add ignore c++是忽略c++的代码提交
协议他是随便写的
branch 是分支,master是主分支的意思
contribxxx参与者
正式使用github
a.克隆远程仓库
b.把本地修改提交到远程仓库上面。
origin master代表分支,远端的分支master
提交后会有d38c468..4d3669b master -> master,第一个master是自己机器的master,第二个是远程的master
第一次提交的时候会让输入github的 帐号 和 密码。
正常add,commit,是对本地的git仓库操作,现在把本地修改提交到远程仓库
git push origin master
c.把远程主机的某个分支的更新,再与本地的指定分支合并
在github网页去编辑README内容,更改以后,本地要同步
git pull origin master
8.本地仓库关联远程仓库
a.github创建一个空仓库
就是不勾选Initalize那个,创建后的页面会有相关提示接下去如何操作(本地如何关联本地仓库)
————————————————–
b.在本地创建一个目录,初始化作为仓库
echo “# hq2” >> README.md git init git add README.md git commit -m “first commit” 这里的步骤其实可以用前面刚开始的哪个仓库,主要就是下面那两步骤
git remote add origin https://github.com/zhangqijun18/hq2.git 使用git remote add origin 将本地仓库xx关联远程hq2仓库 git push -u origin master
把本地库的内容推送到远程,用git push -u origin master命令,实际上是把当前分支master推送的远程。
加上-u参数,git会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时可以简化命令—应该以后就是git push 或 git pull就好了的意思。
gt remote -v
git remote rm origin; —————如果这个仓库是github这种仓库农下来的,但你又想修改后push到其他地方,可以remote rm origin后,remote add origin xxxxxx重新指定要提交的地方
用法:git remote [-v | –verbose]
或:git remote add [-t <分支>] [-m <master>] [-f] [–tags|–no-tags] [–mirror=<fetch|push>] <名称> <url>
或:git remote rename <旧名称> <新名称>
或:git remote remove <名称>
或:git remote set-head <名称> (-a | -d | <分支>)
或:git remote [-v | –verbose] show [-n] <名称>
或:git remote prune [-n | –dry-run] <名称>
或:git remote [-v | –verbose] update [-p | –prune] [(<组> | <远程>)…]
或:git remote set-branches [–add] <名称> <分支>…
或:git remote set-url [–push] <名称> <新的地址> [<旧的地址>]
或:git remote set-url –add <名称> <新的地址>
或:git remote set-url –delete <名称> <地址>
9.分支管理、冲突解决
master分支是主分支。
git用master执行最新 的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点。
比如git创建一个分支develop,此刻会增加一个develop指针,同时将HEAD的指向develop,而工作区的文件没有任何变化。
创建分支 git branch develop
切换分支 git checkout develop
创建并切换分支 git checkout -b tester
查看分支 git branch
列子1:各分支的修改互相不影响
切换到master分支,对1.txt加入 “为master分支而修改“,要add和commit,不然develop分支里面和还是看的到。
切换到develop分支,再看1.txt,上面 “为master分支而修改“ 就看不到,同理加入 “为develop分支而修改“,master分支也不受影响
列子2:在develop分支创建分支dev2
git checkout develop
git branch dev2
git branch
列子3:删除分支dev2
前提是要不是在分支dev2,切换到其他分支
git branch -d dev2
列子4:合并分支
master分支和develop分支都各自分别有新的提交,git试图把各自的修改合并起来(不同分支对相同文件做了修改以后提交会有冲突,比如1.txt),但这种合并也可能会有冲突。
在master分支下,用git merge develop将两个分支合并
git checkout master
git merge develop
自动合并 1.txt
冲突(内容):合并冲突于 1.txt
自动合并失败,修正冲突然后提交修正的结果。
cat 1.txt
第一次使用git
第二次修改
1
<<<<<<< HEAD
为了master分支而修改
=======
为develop分支而修改
>>>>>>> develop
修改冲突:手动修改内容看哪些要哪些不要
git add 1.txt
git commit -m “合并develop到master分支”
git log
git log –graph –pretty=oneline –abrev-commit 查看合并的情况
* 1288d74 为了master分支而修改
* e8bba79 2.txt add
* 428e9fe 第2次修改文件
* 89c04ce 第一次修改文件
* 850aee2 新增了1.txt文件
git push origin 本地分支名:远程分支名 将分支push到远程仓库
git push origin develop 直接这样写,远端分支和本地分支一样
git push origin master 两个都提交一下
可以去github的branch那里去看一下分支提交记录。
git push origin :远程分支名 删除远程仓库分支
10.使用github参与开原项目
fork 分叉分支
意思就是你点击fork复制大牛的代码到仓库,然后在自己仓库里面修改代码,修改后,发起一个请求给大牛,看大牛是否接受,如果接受,你的修改将会同步到他的仓库。
步骤:
a.别人的github项目右上角有个 Fork,会把别人的项目弄到你的仓库
b.然后从自己的仓库把项目克隆下来,然后正常修改,add,commit,push
老师修改了index.html里面的内容,要修改一下,一模一样的话,下面没发创建pull
c.在github网页上,然后提交一个pull requests给大牛
在自己克隆的仓库里面create pull requests

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注