概述
文章目录
- 一. Git开始
- 1.1 设置账户
- 1.2 Git管理模式
- 二. Git初始化
- 2.1 建立本地仓库
- 2.2 添加文件暂存
- 2.3 提交到仓库区
- 2.4 查看状态
- 三. 版本控制
- 3.1 从仓库恢复到暂存
- 3.2 从暂存恢复到工作区
- 3.3 版本回退
- 3.4 使用`git checkout`从仓库恢复文件
- 3.5 查看仓库区状态
- 四. 版本内容对比
- 五. 提交指令参数
- 5.1 修改版本Message
- 5.2 删除文件恢复
- 5.3 删除文件 取消跟踪
- 5.4 重命名文件
- 六. 分支管理
- 6.1 创建分支
- 6.2 切换分支
- 6.3 删除分支
- 6.4 查看分支及版本
- 6.5 合并分支
- 6.6 解决冲突
- 6.7 rebase合并
- 七. 匿名分支
- 7.1 HEAD和分支指针不在一起
- 7.2 为匿名分支创建指针
- 八. Github入门
- 8.1 在Github上创建仓库
- 8.2 关联仓库与推送
- 8.3 从远端读回某个版本
- 8.4 远程一些错误
- 篇中代码片
"filename"
替换为真实文件名时不带引号- 篇中代码片
"DevName"
替换为真实分支命名是不带引号- 篇中提交命令中
"meaasge"
替换为真实的信息描述时仍带引号
一. Git开始
1.1 设置账户
设置自己的账户, 参数--global
表示这台机器上所有的Git仓库都会使用这个配置.
最后一条指令可以查看账户.
>> git config --global user.name "Aokai"
>> git config --global user.email "email@example.com"
>> git config list
说明1. Git是将每个版本独立保存的.
1.2 Git管理模式
- 已修改 (modified)
- 已暂存 (staged)
- 已提交 (committed)
二. Git初始化
2.1 建立本地仓库
在项目文件下运行命令行:
>> git init
2.2 添加文件暂存
>> git add "filename1" "filename2"
>> git add .
// 快捷添加所有文件
2.3 提交到仓库区
>> git commit -m "a message string to explain this commit"
2.4 查看状态
当提交完成, 工作区/暂存区/仓库区 内容一致, 显示如下:
>> git status
On branch master
nothing to commit, working tree clean
三. 版本控制
3.1 从仓库恢复到暂存
从仓库区恢复到暂存区 :
>> git reset HEAD
>> git reset HEAD "filename1" "filename2"
接着2.4章节, 再添加一个文件file2.txt
(未跟踪 Untracked) :
>> git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
file2.txt
nothing added to commit but untracked files present (use "git add" to track)
使用git add file2.txt
添加文件 (未提交) , 暂存区与仓库区不同的status:
>> git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file:
file2.txt
3.2 从暂存恢复到工作区
从暂存区恢复文件 :(危险命令)
>> git checkout -- "filename"
// 格式
>> git checkout -- file2.txt
// 示例
如果修改文件还未暂存, 暂存区与工作区不同的status.
>> git status
On branch master
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:
file2.txt
no changes added to commit (use "git add" and/or "git commit -a")
如果想放弃暂存区内容, 使用git add "filename"
添加暂存就好.
3.3 版本回退
指令示意图:
回滚到仓库区之前版本
>> git reset HEAD~
// 回退到上个版本
>> git reset HEAD~~
// 回退到上上个版本
>> git reset HEAD~2
// 同上, 回退到上上, 多~的快捷写法
>> git reset commitID
// 在git log可看每次的commitID, 只输入前几个字符即可
>> git reset commitID "filename"
// 回滚个别文件, 将不影响HEAD指针
命令get reset
的三种不同参数, 第一种是默认操作, 第三种是危险操作:
格式1:
git reset --mixed HEAD~
– 移动HEAD, 将其指向指定版本
– 将HEAD移动后指向的版本, 恢复到暂存区
格式2:
git reset --soft HEAD~
– 移动HEAD, 将其指向指定版本 (无其他)
格式3:
git reset --hard HEAD~
– 移动HEAD, 将其指向指定版本
– 将HEAD移动后指向的版本, 恢复到暂存区和工作区
3.4 使用git checkout
从仓库恢复文件
一般git checkout
用于切换分支, 但切换同时会覆盖暂存区和工作区, 等效于恢复了文件.
>> git checkout master
// 根据分支名切换
>> git checkout commitID
// 根据快照ID切换
对比于git reset commitID
直接覆盖工作区, 使用git checkout commitID
时会先检查当前状态是否为"clean".
再者, 命令git reset commitID
会移动HEAD所在分支的指向, 而git checkout commitID
只会移动自身指向.
例如 : 当前(HEAD->master) 使用git reset --hard dev2
, 则会将HEAD/master同时指向的分支dev2所在版本快照. 如果操作前master指向的版本不在dev2版本graph上, 该操作可能造成原master版本快照的丢失.
3.5 查看仓库区状态
从近到远依次展示仓库区 信息有 Author/Date/Message/commitID.
>> git log
命令git log
只能查看当前commitID以及此版本之前的commitID.
已丢失commitID的查找方法, 使用git reflog
可查看最近所有 HEAD 的改动, 既可找回想要挽救的 commitID.
四. 版本内容对比
- 暂存区与工作区 比较
>> git diff
// 多行浏览时 按h帮助, 按q退出.
- 仓库区与工作区 比较
>> git diff commitID
- 仓库区与暂存区 比较
>> git diff --cached commitID
- 仓库区不同版本 比较
>> git diff commitID1 commitIG2
命令汇总关系图:
五. 提交指令参数
5.1 修改版本Message
>> git commit --amend
// 进入vim模式修改说明
>> git commit --amend -m "message"
// 以新的message提交覆盖上一次版本信息
5.2 删除文件恢复
>> git checkout -- "filename"
// 使用 git status 查看已删除文件名 // 注意务必指定filename, 否则会影响其他文件
5.3 删除文件 取消跟踪
>> git rm "filename"
该命令同时删除工作区与暂存区的文件, 不修改任何仓库区, 其意思是取消跟踪, 下次提交不纳入版本管理; 若之前已有提交, 则在上一个版本快照中仍有保存.
特殊情况1: 暂存了一个文件后, 此时暂存区与工作区该文件相同; 若只想删除暂存区文件, 这意味着取消跟踪
>> git rm --cached "filename"
特殊情况2: 暂存了一个文件后, 修改文件, 此时暂存区与工作区该文件不同; 执行git rm
会有提示
>> git rm file3.txt
error: the following file has staged content different from both the
file and the HEAD:
file3.txt
(use -f to force removal)
使用git rm -f file3.txt
会暴力同时删除暂存区与工作区该同名文件.
5.4 重命名文件
>> git mv old_filename new_filename
此命令对应了三步操作:
- 重命名
ren/mv old_name new_name
- 删跟踪
git rm old_name
- 填文件
git add new_name
六. 分支管理
6.1 创建分支
>> git branch "DevName"
>> git log --decorate
// 显示HEAD指针位置
...(HEAD -> master, dev1)...
6.2 切换分支
>> git checkout "DevName"
>> git log --decorate --oneline
// git log的精简显示
...(HEAD -> dev1, master)...
- 注意
git checkout
切换分支会更改当前工作区内容. - 使用
git checkout -b dev1
可创建的同时 切换到新的分支 - 使用
git branch
可简略查看分支
6.3 删除分支
>> git branch -d "DevName"
>> git branch --delete "DevName"
命令是删除分支指针, 但版本快照还是存在的.
6.4 查看分支及版本
>> git log --decorate --oneline --graph --all
>> git log --decorate --all --oneline --graph
* f3295d5 (HEAD -> master) add file4_for_master.txt
| * 3cd707a (dev1) add file4_for_dev1.txt
|/
* 12c61d5 4.add a new file3.txt
* b2a2b5c 3.the second change for file2.txt
* 7cc38ca 2.add other file name: file2.txt
6.5 合并分支
>> git merge dve1
- 将分支dve1合并到当前HEAD分支, 若HEAD指向master则就是把dve1合并到master.
- 情况一: 若dve1分支与master分支有同名文件但内容不同, 合并会失败.
- 情况二: 若dve1较master新增了其他文件, 则合并会把所有新文件添加进来, 创建新的版本快照.
*
9e488d5 (HEAD -> master) Merge branch 'dev1'
|
| * 3cd707a (dev1) add file4_for_dev1.txt
* | f3295d5 add file4_for_master.txt
|/
* 12c61d5 4.add a new file3.txt
* b2a2b5c 3.the second change for file2.txt
* 7cc38ca 2.add other file name: file2.txt
- 情况三: master在dve1版本之中, 则会直接将master指向新的, 即Fast-forward模式.
不同于情况二, 该操作不会创建新的版本快照.
- 情况四: dve1新增了文件, master删除了文件, 没做实验, 如有冲突可以参考情况一.
6.6 解决冲突
针对上一节合并时可能存在冲突, 加以说明.
>> git checkout master
>> git merge dve1
// 会报告冲突
>> git status
// 查看冲突文件 "Unmerged", 需手动修改该文件
>> git add
conflictfile
>> git commit -m "merged_message_log"
当将dve1合并到当前分支存在冲突, Git用 <<<<<<<,=======,>>>>>>> 标记出不同分支的内容, 需要手动打开文件进行修改并提交, 合并成功后创建有新快照.
6.7 rebase合并
时间来不及这里没有仔细学, 有帅锅莫烦的讲解rebase 分支冲突 .
七. 匿名分支
7.1 HEAD和分支指针不在一起
>> git checkout HEAD~
>> git log --decorate --oneline --graph --all
* f570f2a (master, dev2) dve2: rm ReadMe.txt
*
9e488d5 (HEAD) Merge branch 'dev1'
*
9e488d5 (HEAD) Merge branch 'dev1'
|
| * 3cd707a (dev1) add file4_for_dev1.txt
* | f3295d5 add file4_for_master.txt
|/
* 12c61d5 4.add a new file3.txt
上述命令后, HEAD移动到前一个版本, 但master指向位置不变, HEAD与master被分开. 该操作有个作用是可以将HEAD指向删除了分支指针的版本快照.
7.2 为匿名分支创建指针
>> git branch "NewDevName" commitID
在匿名分支情况下创建的快照, 当切换到别的分支时, 快照不会被显式保存, 除非记得commitID不然找回.
八. Github入门
创建账户以及添加SSH认证等不多说了, 之前已经搞过, 这里直接进入使用.
8.1 在Github上创建仓库
- 网站主页寻找New repository入创建界面.
- 创建完成查看仓库网址
刚创建完界面或者点击Clone and downloads查看, 样例:
SSHgit@github.com:CoderAokai/Just_a_new.git
HTTPShttps://github.com/CoderAokai/Just_a_new.git
8.2 关联仓库与推送
- 创建与本地关联
在本地已经 git init 的文件下, 运行:
>> git remote add origin git@github.com:CoderAokai/Just_a_new.git
- 推送到Github云端
>> git push -u origin master
其中参数 -u 第二次推送可以省略, origin是在上一步中设置的云端仓库的简称, master表示推送的分支名. 也可以设置推送其他分支 :
>> git push -u origin dev2
8.3 从远端读回某个版本
- 从云端恢复
>> git reset --hard origin/master
- 从云端克隆文件夹
>> git clone https://github.com/CoderAokai/Just_a_new.git
- 从云端取回文件(包括更新)
>> git pull origin master
其指令等效于:
先获取git fetch origin
, 再合并git merge origin/master
8.4 远程一些错误
- 创建关联时失败
添加失败时, 可能要用到移除关联:
>> git remote rm origin
- 推送失败 push
有时候error:failed to push som refs to, 可能需要先pull:
>> git pull origin master
- 下拉失败 pull
如果合并了两个不同的开始提交的仓库, Git会提示失败. 因为 github 的仓库和本地的没有一个共同的 commit 所以git通不过, 认为是写错了origin. 如果确定可用则使用如下指令:
>> git pull origin master --allow-unrelated-histories
版权说明: 本文是 <网易云课堂-Git实用教程> 和 <Git教程 - 廖雪峰的官方网站> 的学习笔记, 使用图片来自课程截图, 图片版权归课程提供商及原作者所有, 转载请注明出处.
非显示图片<>
最后
以上就是阳光蜻蜓为你收集整理的Git使用学习一. Git开始二. Git初始化三. 版本控制四. 版本内容对比五. 提交指令参数六. 分支管理七. 匿名分支八. Github入门的全部内容,希望文章能够帮你解决Git使用学习一. Git开始二. Git初始化三. 版本控制四. 版本内容对比五. 提交指令参数六. 分支管理七. 匿名分支八. Github入门所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复