手机网站一键开发,seo排名分析,民宿客栈网站制作,一家专业做导购的网站目录
0 前 言
1 为什么要使用Git
2 Git初始化及基本配置
3 Git的基本操作
4 Git 回滚功能基本使用
5 如何修改commit的message信息#xff08;Git的变基操作#xff09;
6 Git 开发新功能及bug修复 6.1 方案1#xff1a;git stash 6.2 方案2#xff1a;创建分支。g…目录
0 前 言
1 为什么要使用Git
2 Git初始化及基本配置
3 Git的基本操作
4 Git 回滚功能基本使用
5 如何修改commit的message信息Git的变基操作
6 Git 开发新功能及bug修复 6.1 方案1git stash 6.2 方案2创建分支。git branch
7 GitHub的使用
7.1 什么是GitHub 7.2 GitHub的公私钥的配置 7.3 在GitHub上创建个人仓库
7.4 本地仓库与GitHub的同步操作
7.5 怎么使用GitHub
7.6 命令小结
8 Git多人单分支集成协作操作
8.1 不同人修改了不同文件如何处理
8.2 不同人修改了同文件的同一区域如何处理
8.3 不同人对同一文件同时变更了文件名和文件内容如何处理
8.4 多人修改同一文件的文件名如何处理
9 Git 禁止操作
9.1 禁止git push -f
9.2 禁止在公共集成分支做rebase(变基)操作
10 小 结 0 前 言
略
1 为什么要使用Git 版本控制 什么是版本控制如下场景便是一种版本控制的场景
毕业论文_初稿.doc
毕业论文_修改1.doc
毕业论文_修改2.doc
毕业论文_修改3.doc
毕业论文_完整版1.doc
毕业论文_完整版2.doc
毕业论文_完整版3.doc
毕业论文_最终版1.doc
毕业论文_最终版2.doc
毕业论文_死也不改版.doc
...
这种方式的缺点
多个文件保留所有版本时需要为每个版本保存一个文件...协同操作多人协同操作时需要将文件打包发来发去...容易丢失被删除意味着永远失去...
为了解决上述问题Git便应运而生 主要用于版本控制方便协同开发。
Git本身完全可以做到版本控制但其所有内容以及版本记录只能保存在本机如果想要将文件内容以及版本记录同时保存在远程则需要结合GitHubGitLab来使用。使用场景
无GitHub在本地 .git 文件夹内维护历时文件有GitHub在本地 .git 文件夹内维护历时文件同时也将历时文件托管在远程仓库.
2 Git初始化及基本配置
1在本地创建工作目录 pwd git init 初始化完成后在刚开始创建的目录下会有.git目录生成这个就是git仓库。Git相关文件以及版本都将保存在该文件夹中通过Git命令可以将所有版本保存在 .git 文件中 。git仓库生成后会自动创建第一个分支master指针指向master分支。 2配置user信息 git config --global user.name xiaoyanjinggit config --global user.email xiaoyanjingjxresearch.com
注意config的三个作用域:--local、--global、--system
缺省等同于local--local只对仓库有效--global对登录用户所有仓库有效一般使用这个--system:对系统所有用户有效很少使用
3显示config的配置 git config --list --global 注意选项中一般单个字母的参数是-多个使用-- 优先级 local global system
4清楚设置 --unset git config --unset --local user.namegit config --unset --global user.namegit config --unset --system user.name3 Git的基本操作 相关概念
Git 把管理的区域分成了两个区域四个状态具体如下图所示 工作区当前开发程序所在目录称为工作区即工作开发都是在该目录该区域的文件会有状态的变化且状态由git自动检测如果程序中文件做任何操作增、删、改文件状态均会被检测到可以使用 【git status】命令查看。 版本库工作区检测到有文件发生变化那么意味着较上一个版本之后对程序进行了修改修改完成之后可以当做下一版本进行提交那么就是执行 【git add .】 将所有文件提交到暂存区然后再执行【git commit -m 版本说明】提交到版本库的分支即可之后可以使用【git log】命令查看版本记录。 1将工作区的文件添加到暂存区 git add . git status 执行git add命令后工作区的文件 由红色变成绿色被加入到缓存区
2将暂存区的内容提交到版本库的分支 git commit -m 创建第一个版本 3采用git log 查看提交的版本记录 git log 4相关命令注意点 1.x版本
1.git add all可以提交未跟踪、修改和删除文件。2.git add .可以提交未跟踪和修改文件但是不处理删除文件。 2.x版本 两者功能在提交类型方面是相同的。 区别在于git add .是对当前路径及其子路径下的变更有效git add -A是整个仓库有效其余的功能都一样。 git add -u 他仅监控已经被add的文件即tracked file他会将被修改的文件提交到暂存区。add -u 不会提交新文untracked file。git add --update的缩写,提交被修改(modified)和被删除(deleted)文件不包括新文件(new)
5常用命令总结
git init初始化表示即将对当前文件夹进行版本控制。git status查看Git当前状态如那些文件被修改过、那些文件还未提交到版本库等。git add 文件名将指定文件添加到版本库的暂存状态。git commit -m 提交信息将暂存区的文件提交到版本库的分支。git log查看提交记录即历史版本记录
4 Git 回滚功能基本使用 1查看日志
git log --oneline (2) 回滚到第二个版本上线 git reset --hard 9700629 此时可以查看工作区的内容已经回滚到第二个版本了。 3如果要回滚到最新的版本第五个版本呢 此时git log是不能查看到的需要用到git reflog git log 查看的只是退回到当前版本后的log如下图所示 git reflog --oneline 回退到第五个版本上线
git reset --hard a307aa4 查看结果如下 可以看到工作区的内容已经回退到第五个版本上线 4Git 回滚功能图 上图列举了git相关的回退功能这里列举几个常用的进行实验 ① git checkout git checkout作用于工作区将工作区中中已修改的文件回退到之前状态。 $ git checkout switchtest.sh 查看工作区被修改的文件修改的内容已经被删除。 ② git reset head 文件名回到未暂存的状态 继续修改switchtest.sh文件添加############# git status 已修改的文件为红色 git add . git status 可以看到修改的文件红变绿 此时想要他从暂存区回退到工作区使用git reset git reset HEAD switchtest.sh.由暂存区到工作区中红色部分修改后内容 使用git status查看状态 可以看到回退到修改后状态 如果想要回退最原始状态未修改的状态 使用 git checkout switchtest.sh结果如下图所示 5常用命令小结 git log git reset --hard 版本号 git reflog git checkout
5 如何修改commit的message信息Git的变基操作 1如何修改最新的commit的message信息 查看最新的提交信息git log -1 git commit --amend :弹出的界面就是需要修改的地方 修改为 然后wq!保存退出。该界面用法和vim差不多。保存完毕后可以看到如下信息 git log -1 查看结果后如下 2如何修改历史的commit的message信息 查看目前版本 需求需要将第三个版本上线改成第三个版本完全上线 git rebase -i 很有用的命令变基的时候基如何选择呢一般是选择被变基的父节点的hash码。在此案例中也就是第二个上线版本的Hash码9700629。
git rebase -i 9700629 交互信息如下 解释 p:pick(捡起来)代表当前使用的commit r:使用当前commit,但是编辑commit信息 那么本次修改需要使用r参数将ad240dd前的pick改成r修改如下图所示 wq!保存后会弹出一个交互窗口需要用户修改其中的commit信息此时将第三个版本上线改成第三个版本完全上线即可修改完成后wq!保存后有如下信息表示修改成功。 git log --onlie查看后如下所示表明修改成功 3怎么把连续的多个commit整理成1个 需求将第五、第四、第三三个版本提交信息合并成一个提交信息如第三个版本上线。 git log 查看信息 ① git rebase -i 0446735 基始终选择需要变更的最旧历史节点的父节点本案例中就是第一个上线版本对应的Hash码此时还是像2一样弹出一个交互窗口 ② 通过阅读基本参数信息我们此处选择s(squash):将当前的commit信息融入到前一个提交信息中也就是合并操作meld into操纵如下所示 wq!保存退出后会进入一个交互式窗口VIM编辑器 ③ 进入交互式窗口后进行提交信息修改 保存退出后可以看到成功修改的信息 git log --graph 查看结果 可以看到已经完成了合并操作。 4怎么把间隔的几个commit整理成1个 git log 查看信息 ① 主体的基调不会变还是用git rebase -i 044673此时没有父类基只能选择最原始的。 第一步手动添加需要的信息 第二步 类比连续时的做法创造连续时的条件。手动调换版本二与版本三的顺序 第三步 将版本三前的pick改成s 第四步删掉多余的不需要合并的版本版本并保存退出 ② 保存退出后执行git rebase --continue命令 。此时如果有未提交的内容需要先解决冲突问题。如下图所示 git add . git status git commit -m 新增文件提交 此时再执行git rebase --continue可以看到执行成功 6 Git 开发新功能及bug修复 6.1 方案1git stash stash--栈。1用于将工作区发生变化的所有文件临时存储在“某个地方”。2将工作区还原当前版本未操作前的状态。3stash还可以将临时存储在“某个地方”的文件再次拿回到工作区。
① 检查工作区改动的文件
$ git status
On branch dev
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: dan_test/readme.txtno changes added to commit (use git add and/or git commit -a)② 将文件暂存于某个地方
$ git stash
warning: LF will be replaced by CRLF in dan_test/readme.txt.
The file will have its original line endings in your working directory.
Saved working directory and index state WIP on dev: f4ff714 新增文件提交③ git status 查看工作区恢复到当前版本未做什么事
$ git status
On branch dev
nothing to commit, working tree clean④ 修复bug或者是开发新功能。完事后用git status查看
git status
On branch dev
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: dan_test/readme.txtno changes added to commit (use git add and/or git commit -a)
⑤ 添加修改的bug或是开发的新功能代码到暂存区
$ git add .
warning: LF will be replaced by CRLF in dan_test/readme.txt.
The file will have its original line endings in your working directory.⑥ 提交代码到git仓库
$ git commit -m 紧急修复bug或开发新功能代码
[dev 937c963] 紧急修复bug或开发新功能代码1 file changed, 3 insertions(), 1 deletion(-)⑦ 将刚才暂存的开发的未完善功能的代码从栈中取出来
git stash pop
Auto-merging dan_test/readme.txt
CONFLICT (content): Merge conflict in dan_test/readme.txt此时如果有冲突的话解决冲突即可。 关于stash的命令小结
git stash 将当前工作区所有修改过的内容存储到“某个地方”将工作区还原到当前版本未修改过的状态git stash list 查看“某个地方”存储的所有记录git stash clear 清空“某个地方”git stash pop 将第一个记录从“某个地方”重新拿到工作区可能有冲突git stash apply 编号, 将指定编号记录从“某个地方”重新拿到工作区可能有冲突 git stash drop 编号删除指定编号的记录 6.2 方案2创建分支。git branch 此方案比较推荐。
分支branch称为分支默认仅有一个名为master的分支。一般开发新功能流程为开发新功能时会在分支dev上进行开发完毕后再合并到master分支。 分支种类 主干分支 master 主要负责管理正在运行的生产环境代码。永远保持与正在运行的生产环境完全一致。
开发分支 develop(dev) 主要负责管理正在开发过程中的代码。一般情况下应该是最新的代码。 bug 修理分支 hotfix 主要负责管理生产环境下出现的紧急修复的代码。 从主干分支分出修理完毕并测试上线后并回主干分支。并回后视情 况可以删除该分支。
准生产分支预发布分支 release 较大的版本上线前会从开发分支中分出准生产分支进行最后阶段的集成测试。该版本上线后会合并到主干分支。生产环境运行一段阶段较稳定后可以视情况删除。
功能分支 feature 为了不影响较短周期的开发工作一般把中长期开发模块会从开发分支中独立出来。 开发完成后会合并到开发分支。
① 开发新功能。详细流程图如下所示 ② 相关命令操作如下
1创建分支dev git branch dev 2切换到dev分支 git checkout dev3在该分支上开发新功能4查看 该分支上修改的文件状态 git status5将文件添加到git暂存区git add .6提交代码到git仓库 git commit -m 开发新功能6切换到master分支 git checkout master7合并dev(开发新功能分支)分支git merge dev ③ 创建分支开发新功能此时线上遇到bug需要紧急修复bug具体流程图如下所示 对照流程图相关操作步骤如下
git branch 查看当前分支为master分支git branch dev 创建新分支开发新功能git checkout dev 切换到dev分支开发新功能此时开发过程中遇到bug需要临时解决buggit add . 添加代码到暂存区git commit -m 提交开发新功能一半的代码git branch bug 创建bug分支git checkout bug 切换到bug分支开始修改bug。。。git add . 添加修改bug内容到暂存区git commit -m 提交修改bug内容到仓库中git checkout master 切换分支到mastergit merge bug 将bug分支内容合并到master分支上表示bug修复完毕git checkout dev 切换到dev分支继续开发新功能继续开发新功能。。。git add . 提交继续开发的新功能到暂存区git commit -m 提交继续开发的新功能代码到仓库git checkout master 切换到master分支git merge dev 合并继续开发的功能到master分支上
注意git merge 时也可能会出现冲突解决冲突的方式上述stash相同即找到冲突文件手动修改冲突并提交此处不再敖述。
branch相关常用命令
git branch 分支名称 创建分支git checkout 分支名称 切换分支git branch -m 分支名称 创建并切换到指定分支git branch 查看所有分支git branch -d 分支名称 删除分支git merge 分支名称 将指定分支合并到当前分支
6.3 git clone某一分支
git clone -b 分支名 http协议地址
具体示例如下 git clone -b intellect http://10.9.1.27/bigdata/guoxing-phm-2019.git
7 GitHub的使用
7.1 什么是GitHub
GitHub 是一个面向开源及私有软件项目的托管平台因为只支持 Git 作为唯一的版本库格式进行托管故名GitHub。
GitHub 于 2008 年 4 月 10 日正式上线除了 Git 代码仓库托管及基本的 Web 管理界面以外还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱报表、代码片段分享Gist等功能。目前其注册用户已经超过 3500 万托管版本数量也是非常之多其中不乏知名开源项目 Ruby on Rails、jQuery、python 等。
目前很多大的企业面试开发人员有的要求面试者在简历上附上 GITHUB 帐号辅助审查面试者的能力。 总结 GitHub是一个基于Git实现的代码托管的平台可以将内容以及版本记录在远程仓库中也保存一份其功能类似于百度网盘帮你托管代码如下图所示。 类似GitHub的产品还有许多如GitLab、码云等。 7.2 GitHub的公私钥的配置 第一步先在本地生成公私钥具体参考链接如下 https://help.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent 生成公私钥完成以后进行查看 ls -al ~/.ssh
$ ls -al ~/.ssh
total 37
drwxr-xr-x 1 dandan 197121 0 2月 4 10:57 ./
drwxr-xr-x 1 dandan 197121 0 4月 20 23:15 ../
-rw-r--r-- 1 dandan 197121 1679 2月 4 10:57 id_rsa
-rw-r--r-- 1 dandan 197121 398 2月 4 10:57 id_rsa.pub其中 id_rsa.pub是需要我们复制的。 cat id_rsa.pub然后复制该秘钥到GitHub上。 点击Your profile 编辑自己的profile,个人的配置信息都在这里 点击SSH and GPG keys 复制刚才生成的秘钥到如下key中title可以不用写。 然后点击add SSH key 就可以了生成完后如下所示 7.3 在GitHub上创建个人仓库 第一步点击new 第二步 创建仓库名称,填写description,添加license 第三步 点击创建按钮生成如下 画面 7.4 本地仓库与GitHub的同步操作 同步本地仓库到远程GitHub上需要用到remote命令。新增一个远端的站点。 git init 之后我往往需要把它和远程仓库关联则可以使用下面的命令进行关联。 git remote add github gitgithub.com:dandan0203/git_test.git git remote -v 查看
$ git remote -v
github gitgithub.com:dandan0203/git_test.git (fetch)
github gitgithub.com:dandan0203/git_test.git (push)git push github --all
$ git push github --all
The authenticity of host github.com (52.74.223.119) cant be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added github.com,52.74.223.119 (RSA) to the list of known hosts.
Counting objects: 17, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (11/11), done.
Writing objects: 100% (17/17), 58.85 KiB | 162.00 KiB/s, done.
Total 17 (delta 3), reused 0 (delta 0)
remote: Resolving deltas: 100% (3/3), done.
remote:
remote: Create a pull request for dev on GitHub by visiting:
remote: https://github.com/dandan0203/git_test/pull/new/dev
remote:
To github.com:dandan0203/git_test.git* [new branch] dev - dev! [rejected] master - master (fetch first)
error: failed to push some refs to gitgithub.com:dandan0203/git_test.git
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., git pull ...) before pushing again.
hint: See the Note about fast-forwards in git push --help for details.解决错误 由于远端生成了lisence和readme.md文件而本地没有导致了冲突根据提示信息hint: (e.g., git pull ...) before pushing again.表示在push之前需要先进行合并pull操作。于是我们先进行git pull进行尝试。
git pull
$ git pull
error: Pulling is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use git add/rm file
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.使用git pull继续报错由于未合并的文件 。
采用git merge --allow-unrelated-histories github/master
--allow-unrelated-histories参数可以将不相关的分支进行合并 合并完成后如下所示
$ git merge --allow-unrelated-histories github/master
Merge made by the recursive strategy.LICENSE | 21 README.md | 2 2 files changed, 23 insertions()create mode 100644 LICENSEcreate mode 100644 README.md然后执行 git push github --all
dandan▒▒▒▒ MINGW64 /e/工作/git_test (master)
$ git push github --all
Counting objects: 2, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 356 bytes | 356.00 KiB/s, done.
Total 2 (delta 0), reused 0 (delta 0)
To github.com:dandan0203/git_test.git867c786..1134978 master - master7.5 怎么使用GitHub 参考链接https://blog.csdn.net/godlovedaniel/article/details/105208454
7.6 命令小结 ① 创建远程仓库地址别名 git remote -v 查看当前所有远程地址别名 git remote add [别名] [远程地址] git remote add origin
② 推送
命令git push [别名] [分支名]作用将本地库推送到远程库
③ git clone [远程地址]
效果: 完整的把远程库下载到本地 创建 origin 远程地址别名 初始化本地库
④ 拉取 git pull
pull fetch mergegit fetch 远程库地址别名] [远程分支名]git merge远程库地址别名/远程分支名]git pull 远程库地址别名] [远程分支名 8 Git多人单分支集成协作操作
8.1 不同人修改了不同文件如何处理 背景同一分支中两个人修改了同样的文件 报错内容如下图所示 解决方法使用merge来解决该问题。 1使用git fetch github 命令将远端的变更更新到本地仓库 2使用git branch -av查看此时的远端本地分支情况 3使用merge命令合并 其实提示信息也很清楚了提示用integrate the remote changes合并远端的变化。
8.2 不同人修改了同文件的同一区域如何处理 此时git push 的时候会报如下错误 根据提示采用merge的时候会出现Already up to date.但实际上根本没有提交上去任务。这种情况一般就是远端发生变化了不同人修改了同一个文件的同一区域导致。此时只需要git pull一下便可解决问题。 git pull下会有相关的提示信息按照提示信息便可解决。
8.3 不同人对同一文件同时变更了文件名和文件内容如何处理 背景A和B在同一个分支上对同一份代码仓库中的同一个文件做修改A变更了文件名B在不知道的情况下基于原来的文件名对文件内容做了变更此时合并出现问题应该怎么解决 此时git push 会报错出现non fast-forward的错误提示解决办法只需要使用命令git pullgit会自动处理这种情况。
8.4 多人修改同一文件的文件名如何处理 背景A修改了某个文件的文件名B也修改了该文件的文件名导致的冲突 此时解决方法也是先git pull一下但此时git报冲突如下图所示 可以先ls -al查看一下目录然后diff一下不同名的文件看是否内容一致 如果一致就手动删掉一个git rm只上传一个就可以了。
9 Git 禁止操作
9.1 禁止git push -f 如果远程主机的版本比本地版本更新推送时Git会报错要求先在本地做git pull合并差异然后再推送到远程主机。这是正常合理的代码提交流程。 这时如果你一定要推送可以使用--force选项。 $ git push --force origin 上面命令使用--force选项结果导致远程主机上更新的版本被覆盖。这时某位同学之前推送的代码会被覆盖掉如果该同学不小心更新你的版本git pull此时该同学的本地工作目录也会被覆盖那么就会导致之前的开发工作前功尽弃是比较要命的操作。 一般来讲应尽量避免该操作除非你很确定要这样做否则应该尽量避免使用--force选项。 怎么样才能避免使用 该操作呢 1 创建自己的工作分支 这样只会影响到自己而不会影响到别人 2 设置保护机制 GitHub网站有提供保护机制可以避免某个分支被Force Push。可以到仓库的「Settings」页签左边选择「Branches」添加保护的规则。
9.2 禁止在公共集成分支做rebase(变基)操作
10 小 结 git作为一种代码管理工具越来越多的被用在各个公司使用的人数也非常广泛。本文针对git的相关知识进行了详细地总结和研究针对git中常见出现的问题进行归纳总结方便读者进行查阅和学习。