首页 > 其他 > 详细

Git 基础知识

时间:2021-04-17 11:05:41      阅读:18      评论:0      收藏:0      [点我收藏+]

Git 基础知识

Git是程序员的一项必备技能,每个程序员都‘会‘。 有时,却发现身边的朋友没有很好的使用,在这里总结一下自己的Git使用习惯,有机会分享给他们_.
如果有路过的初学Git的小伙伴,能从此文中收获一点点,也是非常不错的事情。 「鼓掌」

我的朋友们使用Git

  1. 仅使用 add, commit, pull, push, clone 这几个完全无法避免的指令。
  2. 一 pull/push 就很多冲突。
  3. 提一次push 库上多了非常多的文件,一看 .idea/ .vscde/ *.exe pycache *.log 等等乱七八糟的东西。(当然这和库的gitignore文件没考虑好有关)
  4. 一个任务要提交到多个分支,一个一个复制,或着本地clone多个项目等等。
  5. emmmm 还要说么...还是直接开始正题吧

我总结了什么

我并不打算一个命令一个命令的说,一是我也不算精通,二来我觉得这既然是个工具,就应该按照他做什么来讲他怎么做。以下是我这次想要总结的(后续想到了再补充):

  1. 项目Clone
  2. 拉取代码
  3. 提交代码
  4. 忽略的文件
  5. 一个代码提交多个分支

正文开始

1. 项目clone

git 项目的合作方式比较常见的有两种 (更推荐第一种)。
第一种是用户fork代码库,然后每次提交都是提交到自己fork的代码库中,再从自己fork的库向原库提交Merge Request。(开源库的协作基本都是这样)
第二种是库上除了版本分支还有任务分支,每次接到任务后,都从最后要合并到的分支中checkout -b出一个任务分支, 完成后再合并到原分支中。
关于这两种各自的优劣,可以想一想,算是一个比较有意思的事情。

git clone url
git clone -b branch url  # 当你只需要clone一个分支时,在项目中常见的情况是git clone -b dev url 即仅clone开发分支
# 如果你有时会用到自己的电脑开发公司的内容,你需要配置当前项目的用户和邮箱
git config user.name "xxxxx"
git config user.email "xxx@xxx.com"

如果你是第一种协作方式,那么以下步骤建议进行:

git remote add  upstream url # upstream 可为其他的名字,url为原始库地址,这行命令是关联一个远程库并为这个关联取名
git remote -v # 查看本地库关联了哪些远程库

Tips:提醒一下初学的小伙伴,库中怎么辨认提交是你的呢,git config 就是为此而准备,为了避免每clone一个项目都config一次,我们可以git config --global, 这样你没有设置当前代码库,会默认使用global配置。
当然,这个可以随意配置,比如你的user.name为"iiiiiisu"可以的,所以更有效的辨认方式是ssh-key,动动手指搜一搜。

2. 拉取代码

拉取代码需要注意的地方比较少,这里提两点:

  1. 勤拉代码,保持本地库的代码和远程库(原库)的内容差的不多,这样能够减少和避免冲突的发生, 一般建议至少每天拉一次。
  2. 想要避免冲突,还有一点是灵活使用stash命令,下面详细说说。
    使用stash 可以暂存本体代码, 使用 git stash 能够将add后的代码暂存起来,这个时候你是看不到你暂存的那些内容的,使用git stash list可以查看你的暂存列表。
    接着我们使用git pull来使代码分支更新到与远程分支内容一致, 然后使用git stash pop 或者 git stash apply (区别请动动手指查一查)。
    如果我们的代码和远程分支有冲突,此时修改掉就好,可以避免我们提交的时候提示冲突。

Tips: git stash save "我暂存的代码是干嘛的", 向前面这样做可以在git stash list 的时候看到每一条暂存是干嘛的,当然,能不能看出来也取决于你的提示你自己能否看懂_

3. 提交代码

!!! 提交代码是代码协作最重要的一步,请谨慎提交。
提交代码最好注意以下几点

  1. 让冲突发生在commit前。
  2. 一个任务尽可能少的提交次数,即避免代码没认真审视就commit,而不是让你提交完了发现问题却不补充commit
  3. 提交信息尽可能符合规范(无通用规范,具体看库的管理者要求),其次尽可能明确和简洁
  4. 不要提交不相关的文件

第一点很容易理解和解决,提交前解决冲突远比提交后解决冲突来得简单和优雅,可以使自己的提交看起来更加的干净,解决方法的话参考拉取代码部分,让冲突发生在本地未提交时。
第二点的重点是细心的审视自己的代码,和规范的提交操作, 解决冲突也是减少提交次数的必要操作。
第三点的话,就全凭自觉了。
第四点,两个,哦不,三个方法避免,手动删除&_&,
下面做个示范,假设当前分支为dev, origin 指向fork库, upstream指向原库

git add .     #  假设没有不相关文件
git stash save "temp"
git pull upstream dev
git stash pop
# 若有冲突此时处理
git commit -m "taskid: 这个任务是干嘛的"   #  commit内容较短时
# or  git commit   # commit 内容较长时
git push origin dev
#  网站上提Merge request。
# 分支方式协作提交类似,请自行带入

Tips: git add 后发现add多了?git reset file, git reset . 可以取消所有add,可以避免add不相关的文件带来的问题。
git commit 的信息需要修改? git commit --amend 试试,或许这正是你想要的

4.忽略的文件

.gitignore 最通用的忽略方式,编写简单,所有人都会受到影响,适合忽略编辑器文件夹,项目log,和项目编译运行时产生的文件和文件夹,如exe, pycache 文件夹, target文件夹等等
.git/info/exclude (文件中内容填写类似.gitignore, 适合在只忽略自己本地文件的时候使用,不会像.gitignore一样影响所有人, 我个人认为这个很有用 )。

5. 一个代码提交多个分支

现在模拟一个场景,同一个补丁分别添加dev分支,main(master)分支,和某一个特性分支假设名为rainbow
当前本地为dev

#  这里忽略push步骤等,
git commit
git push origin dev
git log  # 获取刚才commit的id
git checkout main
git cherry-pick commitid
git push origin main
git checkout rainbow
git cherry-pick cinnutud
git push origin rainbow

使用git cherry-pick 除了比手动改了提交更方便外,还能保证这几个分支合并的时候,不会因为这些相同的代码产生冲突,因为他们的commitid是同一个。

# 以下内容与本文无关

若编程只是兴趣。(Golang, Python,Rust -> Web、GUI、OS)

Git 基础知识

原文:https://www.cnblogs.com/moxu-ez/p/14669283.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!