返回

Git教程

发布时间:2022-11-05 13:35:39 367
# ssh# git# github# 软件# 软件

1.创建版本库

选一个合适的文件夹(不一定要非空)

git init

2.添加文件到版本库

2.1 添加文件

git add 3.txt
git add readme.md 1.txt 2.txt
git add .

2.2 提交文件

git commit -m "本次提交的说明"

为什么git添加文件需要add, commit两步呢?
因为commit可以一次提交很多文件,所以你可以多次add不同的文件

3.各种查看

git status  # 查看状态
git diff # 查看修改
git log # 查看操作日志
git log --pretty=oneline # 显示操作日志到一行
git reflog # 查看历史命令

4.版本回退

git reset --hard HEAD^  # 回退到上一版本
git reset --hard HEAD^^ # 回退到上上个版本
git reset --hard HEAD^^^^^ # 回退到上五个版本
git reset --hard HEAD~5 # 功能同上
git reset --hard 3638164 # 回退到给定版本号的版本

5.工作区和暂存区

Git教程_推送

 

git add添加到暂存区

git commit 提交到当前分支

git commit 只会提交已经add了的修改, 如果你在add之后再次修改该文件而不再次add, 此时commit的话这次修改不会被提交

6.撤销修改

git checkout -- readme.md
git reset HEAD readme.md # 撤销暂存区的修改重新放回工作区

如果文件修改了还没git add, 则会撤销这次修改
如果文件已经git add了, 然后又修改了, 则会回到add之后修改之前的版本

7.删除文件

git rm readme.md

8.远程仓库

现在的情景是,你已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步

8.1关联本地仓库和远程仓库(github)

# 先在8.1在github上创建一个仓库
# 然后关联这两个库
git remote add origin https://github.com/xiligey/Code.git # use http
git remote add origin git@github.com:xiligey/Code.git # use ssh(优先选择ssh)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o39xo8dl-1610182303632)(https://ooo.0o0.ooo/2017/03/16/58ca05a5e66a9.png)]

 

8.2将本地仓库的内容推送到远程仓库

git push -u origin master

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令

8.3将远程仓库的内容克隆到本地

git clone git@github.com:xiligey/Code.git

9.分支管理

9.1创建并合并分支

git checkout -b dev  # 创建dev分支并切换当前分支为dev
git branch dev # 创建dev分支
git checkout dev # 切换到dev分支
git branch # 查看所有分支并在当前分支前标一个*
git merge dev # 把dev分支上的工作成果合并到master
git branch -d dev # 合并完成后, 放心的删除dev分支

9.2解决合并分支时的冲突

git checkout -b feature1 # 准备新的feature1分支
git add readme.txt # 修改readme.md并在feature1分支上提交
git commit -m “add_feature1”
git checkout master # 切换到master
git add readme.txt # 在master分支上修改文件并提交
git commit -m “add_master”
现在master分支和feature1分支都有了各自的新的提交

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3yzJQpFb-1610182303633)(https://ooo.0o0.ooo/2017/03/16/58ca0a1683f27.png)]

这种情况下, git无法执行快速合并, 只能试图将各自的修改合并起来,但是这样合并可能会有冲突 ``` $ git merge feature1 Auto-merging readme.txt CONFLICT (content): Merge conflict in readme.txt Automatic merge failed; fix conflicts and then commit the result. ``` 果然冲突, git告诉我们readme.txt存在冲突, 必须手动解决冲突再提交, git status也可以告诉我们冲突的文件 `git log --graph # 可以查看分支合并图`

9.3分支管理策略

通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息

git checkout -b dev  # 创建并切换dev分支
git add readme.txt
git commit -m "add merge"
git checkout master # 切回master分支
git merge --no-ff -m "merge with no-ff" dev # 使用no-ff模式合并分支并创建一个新的commit,所以要加上-m参数
git log --graph --pretty=oneline --abbrev-commit

可以看出, 不使用fast forward模式, merge后就像这样:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wKBinZdK-1610182303634)(https://ooo.0o0.ooo/2017/03/16/58ca0c3c0076b.png)]

9.4分支策略

在实际开发中,我们应该按照几个基本原则进行分支管理:

首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

所以,团队合作的分支看起来就像这样:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OCl65D4z-1610182303635)(https://ooo.0o0.ooo/2017/03/16/58ca0c6f7fde4.png)]

10.bug分支

pass

11.feature分支

Feature分支

阅读: 229523
软件开发中,总有无穷无尽的新的功能要不断添加进来。

添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。

现在,你终于接到了一个新任务:开发代号为Vulcan的新功能,该功能计划用于下一代星际飞船。

于是准备开发:

$ git checkout -b feature-vulcan
Switched to a new branch 'feature-vulcan'

5分钟后,开发完毕:

$ git add vulcan.py
$ git status
# On branch feature-vulcan
# Changes to be committed:
# (use "git reset HEAD ..." to unstage)
#
# new file: vulcan.py
#
$ git commit -m "add feature vulcan"
[feature-vulcan 756d4af] add feature vulcan
1 file changed, 2 insertions(+)
create mode 100644 vulcan.py

切回dev,准备合并:

$ git checkout dev

一切顺利的话,feature分支和bug分支是类似的,合并,然后删除。

但是,

就在此时,接到上级命令,因经费不足,新功能必须取消!

虽然白干了,但是这个分支还是必须就地销毁:

$ git branch -d feature-vulcan
error: The branch 'feature-vulcan' is not fully merged.
If you are sure you want to delete it, run 'git branch -D feature-vulcan'.

销毁失败。Git友情提醒,feature-vulcan分支还没有被合并,如果删除,将丢失掉修改,如果要强行删除,需要使用命令git branch -D feature-vulcan。

$ git branch -D feature-vulcan
Deleted branch feature-vulcan (was 756d4af).

成功删除

12.多人协作

多人协作的工作模式通常是这样:

  • 首先,可以试图用git push origin branch-name推送自己的修改;
  • 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
  • 如果合并有冲突,则解决冲突,并在本地提交;
  • 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
  • 如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。

这就是多人协作的工作模式,一旦熟悉了,就非常简单。

13.标签管理

13.1创建标签

git branch  # 在git中打标签非常简单, 首先切换到需要打标签的分支上:
git tag v1.0 # 打一个新标签
git tag # 查看所有标签
# 默认标签是打在最新提交的commit上的, 有时候如果忘了打标签, 可以找到
# 历史提交的commit id, 然后打上就可以了
git log --pretty=oneline --abbrev-commmit
git tag v0.9 6224937 # 在6224937上打标签
git tag # 再查看一下已有标签
git show v0.9 # 查看标签信息(标签不按时间顺序列出,按字母排序)
git tag -a v0.1 -m "version 0.1 released" 3628165 # 创建带说明的标签
git tag -s -m "blablabla..." # 可以用PGP签名标签

13.2标签的操作

git tag -d v0.1  # 删除标签
git push origin v1.0 # 创建的标签不会自动推送到远程, 推送到远程需要如此
git push origin --tags # 一次推送全部本地标签到远程
git tag -d v0.9 # 如果标签已经推送到远程, 要先本地删除
git push origin :refs/tags/v0.9 # 然后远程删除, 如此如此

14.自定义git

git config --global color.ui true # 让git显示颜色

15.忽略特殊文件

在.gitignore文件中加上不想推送的文件类型

# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini

# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build

# My configurations:
db.ini
deploy_key_rsa
# 强制添加一个被.gitignore忽略的文件
git add -f 1.pyc
# 检查ignore
git check0ignore -v 1.pyc # git会告诉我们, .gitignore第三行忽略了该文件

16.配置命令的别名

# 告诉git以后st就表示status, global参数是全局参数, 这些命令将可以使用与本电脑的所有git仓库
git config --global alias st status
# 举点例子
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch
$ git config --global alias.unstage 'reset HEAD'
$ git config --global alias.last 'log -1'
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LC8teZsd-1610182303636)(https://ooo.0o0.ooo/2017/03/16/58ca270f07d4e.png)]

 

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
缺失值 2022-11-05 13:23:47