进入文件夹,右键 Git Bash Here
初始化,让 git 帮助我们管理当前文件夹。
1
git init
检测状态:查看可以用 Git 管的文件。
1
git status
使用 Git 管理具体文件。
1
git add 具体文件名
使用
git status
查看,发现被管理的文件变绿了,没有被管理的还是红色的。- 红色:新增文件 / 或修改的老文件 → 需要
git add 文件名
- 绿色:git 已经管理起来了 → 需要
git commit -m '描述信息'
- 透明色(看不到)表示已经全部被管理起来了。
- 红色:新增文件 / 或修改的老文件 → 需要
使用 Git 管理所有文件的快捷命令(add 后面加个点)。
1
git add .
生成版本。
1
git commit -m 'version 1'
使用
git status
查看,发现什么都没有了,意味着所有的文件已经被管理起来,并生成版本了。对文件内容进行修改。使用
git status
查看,检测到有文件被修改。需要继续使用git add
的命令将其管理起来,可以后面接具体的文件名,也可以使用【点】,把所有被修改的文件都管理起来。管理起来后,使用git commit -m '描述信息'
生成版本。1
git commit -m 'version 2'
查看版本记录。
1
git log
报错!需要生成个人的信息配置。
1
2git config --global user.email "you@example.com"
git config --global user.nam "Your Name"命令行生成文件。
1
touch test.py
回滚功能,回滚到之前的版本(版本号使用
git log
查看)。1
git reset --hard 版本号
回滚到之后的版本。
1
2git reflog
git reset --hard 版本号使用
git checkout -- 文件名
或git restore 文件名
将工作区对文件的修改撤销。使用
git reset HEAD 文件名
或git restore --staged 文件名
将暂存区的文件撤回到工作区。主干线 Master。
查看 / 创建 / 切换分支
1
2
3git branch
git branch 分支名
git checkout 分支名将分支合并到 Master:首先将分支切换回 Master,然后执行合并代码,之后删除该分支。
1
2
3git checkout master //注意一定要切换分支,分清楚谁来合并谁
git merge 要合并的分支名
git branch -d 已合并的分支名合并时报错:产生冲突,需要手动解决。解决完后,使用
git status
检测到有文件被修改,使用git add .
进行管理,使用git commit -m '描述信息'
进行提交。工作流,一般不在 Master 分支写代码,都在 dev 上写。稳定了再合并到 Master 分支。
Github
流程 1:注册账号→创建仓库→本地代码推送。
1
2
3git remote add origin 远程仓库地址 //起别名,可以叫 origin,也可以叫别的
git push -u origin master
git push -u origin dev //有几个分支推送几个分支流程 2:从 Github 拉到本地
1
git clone 远程仓库地址
在新电脑上开发,切换到 dev 分支,保证 dev 分支中的代码是最新的。
1
2git checkout dev
git merge master //把 master 中的代码合并到 dev 中 [仅执行一次]写完后还要推送到 Github 上。
1
git push origin dev //把 -u 简写掉
回到家中,先切换到 dev 分支,再把代码从远程仓库拉下来。
1
2git checkout dev
git pull origin dev写完后,再执行一系列的命令。如下:
1
2
3
4touch a2.py
git add .
git commit -m '在家深夜写的代码 a2.py'
git push origin dev到公司后,又要把家里写的代码从远程仓库拉下来。
1
git pull origin dev
……(重复以上步骤)
开发完毕后,上线。
1
2
3
4
5
6
7
8
9
10touch a3.py
git add .gi
git checkout master
git merge dev
git push origin master
//把 dev 分支也推送到远程仓库
git checkout dev
git merge dev //一个习惯,其实都已经是最新的了
git push origin dev偶然事件:在公司忘记推送代码。在家又写了新的代码推送到了远程仓库中。到了公司将远程仓库的代码拉下来,会和之前在公司忘记推送的代码产生冲突,需手动合并。
rebase(变基)命令
使 git log 简洁。注意:如果有已推送到远程仓库的代码,就不要合并它了。
将自己的提交记录合并,合并的是文件版本号之后的所有版本。多个记录合并成一个记录。
1
git rebase -i 文件的版本号
强行将 dev 分支插入到 master 分支中去。(没有弄懂)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23git log --graph --pretty=format:"%h %s" //图形化查看分支提交记录
//在 dev 分支中写代码
git checkout dev
touch s1.py
git add .
git commit -m 's1'
//在 master 分支中写代码
git checkout master
touch s2.py
git add .
git commit -m 's2'
//切回到 dev 分支中 rebase
git checkout dev
git rebase master
//切回到 master 分支中把 dev 的代码 merge 过来
git checkout master
git merge dev
//以上即可完成云端和本地代码的合并。
1
2
3
4git pull origin dev
↓
git fetch origin dev
git rebase origin/dev
多人协作工作流
在 Github 中创建组织,在组织中创建项目。(需要收费)
1
2git remote add origin 远程仓库地址
git push -u origin master基于 tag 做版本控制。相当于把一长串的哈希值用标签来表示。
1
git tag -a 版本号 -m '描述信息'
把 tag 也推送到远程仓库中
1
git push origin --tags
创建并切换到 dev 分支。
1
git checkout -b dev
把 dev 分支推送到远程仓库。
1
git push origin dev
给开源软件贡献代码
fork 源代码(可以导到自己的个人账户里面)。
在自己的仓库中修改,然后上传到自己的远程仓库中。
1
2
3
4
5
6git clone 远程仓库地址
cd tensorflow/ //进入该文件夹
touch bug.py //修改了bug,假设是创建了文件
git add .
git commit -m 'xxx'
git push origin master给源代码作者提交修改 bug 的申请(pull request)。
其他
三个配置文件
local
global
system
。项目配置文件:项目/.git/config
1
2git config --local user.name 'xxx'
git config --local user.name 'xxx@xx.com'全局配置文件:~/.git/config
1
2git config --global user.name 'xxx'
git config --global user.name 'xxx@xx.com'系统配置文件:/etc/.git/config
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17git config --system user.name 'xxx'
git config --system user.name 'xxx@xx.com'
需要有 root 权限
2. 应用场景
3. 免密登录
- URL 中体现
- SSH 实现
- git 自动管理凭证
4. gitignore 忽略文件
让 Git 不再管理当前目录下的某些文件,更多可参考 github 中的 ignore(搜索即可)
*.h
!a.h
files/
*.py[c|a|d]任务管理
- issues:文档以及任务管理,也可以作为查找遇到的问题的方式。
- wiki:项目介绍
参考
- 本文标题:Git 版本控制
- 创建时间:2023-01-24 21:47:31
- 本文链接:2023/01/24/024-Git-版本控制/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!