参考:
git是一个运行在电脑上的版本控制软件,而GitHub是基于git这个版本控制软件打造的网站
git的三个概念:提交commit、仓库repository、分支branch
github操作相关
一、注册(sign up)
二、访问仓库
1. 域名+仓库owner+仓库名(.git)
github.com/../..(.git)
2. github搜索
三、使用
1.仓库管理
explore:根据浏览习惯与兴趣创建一个仓库列表,每天更新。
2.创建仓库,添加文件,提交issue,提交/接受pr
2.1创建仓库new repository
- Add .gitignore 对于只使用GitHub的用户是不用管的
- license是本仓库的协议文件
2.2添加文件
add files
2.3提交issue
new issue
将issue问题归属到自己名下,由自己来进行解决,通过assignees设置
labels选择issue的标签
2.4提交pr
3.如何去查找开源项目
-
trending
-
技巧。常用前缀后缀
- 找百科大全 awesome xxx
- 找例子 xxx sample
- 找空项目架子xxx starter/xxx boilerplate
- 找教程xxx tutorial
git
- 配置public key
ssh-keygen -t rsa -C“youremail@example.com” 注意,上述youremail@example.com是指GitHub的账户的注册邮箱
-
下载到本地:
git clone .. -
star收藏
-
git clone与download zip下载的区别:download zip下载解压得到的是【文件夹】;而clone下来的是【仓库】,有一个隐藏的.git文件夹,不希望被删掉;文件夹要通过git初始化后才能变成【仓库】。
-
git init 初始化文件夹,变成一个仓库,进行后续git版本管理
-
git add -A把所有的文件都加入暂存区
-
git commit -m "提交信息"
已有的代码文件都在
工作区里,通过git add <file>进入暂存区,接着通过git commit -m ""提交的方式到仓库 -
vs code代码绿色,表示代码还在你的工作区里,还没有提交到仓库。分支图标表示源码管理器,更改会与之前的进行比较,U代表完全新增的一个文件。git add 之后,分支那里会有一个暂存的更改
-
git提示:please tell me who you are
- git config --global user.email "your email"
- git config --global user.name "your name"
-
直接在分支图标那里,添加到暂存区,就是那个加号。commit直接在更改上面的消息框,输入提交信息,按下command+enter
-
git config --global init.defaultBranch <name> -
git branch -m <name> -
git log --stat查看提交记录的历史。如何退出命令行呢?分支也可以看commit。 回滚:
-
git checkout <filename>工作区打回去。或者直接在分支图标那里直接点击放弃更改的图案。 -
git reset HEAD^ 提交后撤回。定向到HEAD的某一个。HEAD^1表示HEAD的上一个。或者找到那个需要撤回的commit,右键点击undo commit 分支:(命令行或者vs code的图形化操作界面)
-
git checkout -b 分支名 从当前节点新建分支。以当前分支为基础新建分支。(该命令最好是在主分支下执行)
-
git branch 列举所有的分支
-
git checkout <branchname>单纯的切换到某个分支 -
git branch -D <branchname>删掉特定的分支(分支完成各自任务合并至master后,就可以删除了) -
git merge <branchname>合并分支(在master分支下执行,表示将下的内容全部合并到master下)
当两个分支的内容修改有冲突就会出现如下提示。右键分支图标的合并更改,选择当前已有,还是当前传入。
-
git merge --abort放弃本次合并2933 git与GitHub远程仓库:
-
git push 推送
-
git pull 拉取 在GitHub远端new repository一个空白的仓库,接着把本地创建好的这个仓库提交上去即可。
-
git remote add origin git@git.xxx:xxx/xxx.git 关联远程仓库
-
git pull origin master 此时已经有远程库在你本地了
没有本地仓库,根据远程仓库创建一个。
`…or create a new repository on the command line`
echo "# copy" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M master
git remote add origin git@github.com:leondong68/copy.git
git push -u origin master
已有本地仓库,将本地仓库推送至远程。
`…or push an existing repository from the command line`
git remote add origin git@github.com:leondong68/copy.git
git branch -M master //改名,重名分支
git push -u origin master
git remote add origin git@github.com:leondong68/copy.git表示我们把copy当作一个远端的仓库,添加到了我们本地的git中,git就能知道他在远端的仓库对应的是我们刚刚在GitHub新建的这个。
后续如果在本地有任何更改,就可以直接git push推送到远端了。在push到GitHub之前,git会做一个比较,你现在提交的这个水平是不是已经领先于GitHub,如果是,就用push。但是如果远程已经有了新的更新了,本地还没有,本地进行了其他的更新,这个时候会让你先pull,再push。pull的过程其实就是和远程这个分支合并的过程,合并也可能产生冲突。
在GitHub上修改,commit changes按钮。现在只是远程修改了,本地没有修改,需要git pull拉取到本地。
在本地做好更改之后,提交更改到远程
先 git add . 表示保存所有更改到暂存区
再 git commit -m "这次是xx的修改" 到仓库
然后 git push [远程仓库名] [本地分支名] : [远程分支名] 将仓库的修改提交到了远程分支
从远程仓库拉取最新代码合并到本地分支
- 1.
git pull:获取最新代码到本地,并自动合并到当前分支(不推荐这种方式,因为是直接合并的,无法提前处理冲突。)
//查询当前远程分支
$ git remote -v
//直接拉取并合并最新代码
$ git pull origin master [示例1:拉取远端origin/master分支合并到本地当前分支]
$ git pull origin dev [示例2:拉取远端origin/dev分支合并到本地当前分支]
-
2.
git fetch + merge: 获取最新代码到本地,然后手动合并分支额外建立本地分支
//查看当前远程的版本
$ git remote -v
//获取最新代码到本地临时分支(本地当前分支为[branch],获取的远端的分支为[origin/branch])
$ git fetch origin master:master1 [示例1:在本地建立master1分支,并下载远端的origin/master分支到master1分支中]
$ git fetch origin dev:dev1[示例1:在本地建立dev1分支,并下载远端的origin/dev分支到dev1分支中]
//查看版本差异
$ git diff master1 [示例1:查看本地master1分支与当前分支的版本差异]
$ git diff dev1 [示例2:查看本地dev1分支与当前分支的版本差异]
//合并最新分支到本地分支
$ git merge master1 [示例1:合并本地分支master1到当前分支]
$ git merge dev1 [示例2:合并本地分支dev1到当前分支]
//删除本地临时分支
$ git branch -D master1 [示例1:删除本地分支master1]
$ git branch -D dev1 [示例1:删除本地分支dev1]
无须额外建立分支(推荐)
//查询当前远程的版本
$ git remote -v
//获取最新代码到本地(本地当前分支为[branch],获取的远端的分支为[origin/branch])
$ git fetch origin master [示例1:获取远端的origin/master分支]
$ git fetch origin dev [示例2:获取远端的origin/dev分支]
//查看版本差异
$ git log -p master..origin/master [示例1:查看本地master与远端origin/master的版本差异]
$ git log -p dev..origin/dev [示例2:查看本地dev与远端origin/dev的版本差异]
//合并最新代码到本地分支
$ git merge origin/master [示例1:合并远端分支origin/master到当前分支]
$ git merge origin/dev [示例2:合并远端分支origin/dev到当前分支]
git add -A 和 git add . 的区别: git add -A和 git add . git add -u在功能上看似很相近,但还是存在一点差别
git add . :他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。
git add -u :他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)
git add -A :是上面两个功能的合集(git add --all的缩写)
git init
echo Change me > change-me
echo Delete me > delete-me
git add change-me delete-me
git commit -m initial
echo OK >> change-me
rm delete-me
echo Add me > add-me
git status
# Changed but not updated:
# modified: change-me
# deleted: delete-me
# Untracked files:
# add-me
git add .
git status
# Changes to be committed:
# new file: add-me
# modified: change-me
# Changed but not updated:
# deleted: delete-me
git reset
git add -u
git status
# Changes to be committed:
# modified: change-me
# deleted: delete-me
# Untracked files:
# add-me
git reset
git add -A
git status
# Changes to be committed:
# new file: add-me
# modified: change-me
# deleted: delete-me
总结:
-
git add -A 提交所有变化
-
git add -u 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
-
git add . 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
常用git命令
- 创建分支
git branch test
- 把分支推到远程分支
git push origin test:master // 提交本地test分支 作为 远程的master分支
git push origin test:test // 提交本地test分支作为远程的test分支
- 查看本地分支
git branch
-
切换分支到test git checkout test
-
切换到之前提交的log(commit 69ad395df31468bdc062ab7b4c623cf40c6df4ce)上 git checkout 69ad395df
-
删除本地分支test git branch -d test
-
删除远程分支
git branch -r -d origin/branch-name
git push origin :branch-name
git remote remove br-name
-
获取远程分支信息 git remote show (remote-br)
-
将当前master中的内容提交到另外一个远程分支 git remote add branch1 xxx.git
git fetch branch1
git merge branch1/master
git push branch1 master
从一个远程仓库拉取更新同步到另外一个远程仓库。一个典型应用场景是,我fork了一个RTT到我的git下,然后从我的远程仓库中git clone到了本地。一段时间之后,RTT官方的git上有了更新,如何把RTT官方git上的更新同步到我的远程git上?就利用上面的命令,首先在本地git命令中用git remote add增加一个分支来跟踪RTT官方的git,然后把RTT官方的更新git fetch下来,再然后用git merge合并到本地的master分支上,最后用git push提交到自己的远程git上。
- 把分支"branchname"合并到了当前分支里面
git merge branchname
如果有冲突,在有问题的文件上会有冲突标记,在你手动解决完冲突后就可以把此文件添 加到索引(index)中去,用git commit命令来提交,就像平时修改了一个文件 一样。
将其它分支多个commit合并到当前分支的一个commit
git merge --squash another
git commit -m "message here"
--squash 选项的含义是:本地文件内容与不使用该选项的合并结果相同,但是不提交、不移动HEAD,因此需要一条额外的commit命令。其效果相当于将another分支上的多个commit合并成一个,放在当前分支上,原来的commit历史则没有拿过来。
- 打标签
git tag -a v1.4
共享标签到服务器
git push origin --tags
- 放弃当前目录的所有修改
git checkout .
- git查看某个文件的修改历史
- 先切换到文件所在目录,如
cd packages/apps/Mms/src/com/android/mms/ui/
- 然后使用以下命令之一
Git log -p filename
查看文件的每一个详细的历史修改,如果没有-p选项,只显示提交记录,不显示文件内容修改,git log -p -3
filename 显示最近的3次提交。
git log --pretty=oneline filename
每一行显示一个提交,先显示哈希码,再显示提交说明。
git blame filename
查看文件的每一行是哪个提交最后修改的。
本地分支merge到远程分支
背景:为了更加规范维护自动化测试工程,代码提交流程最近更新了,先拉分支到本地修改,完成后同步到远程分支。
前置条件
(1)本地机器可通过ssh与gitlab服务器通信
(2)gitlab上的测试项目中有两个分支master、auto_test
步骤一、创建本地分支
执行命令:git checkout -b local_auto_test auto_test //基于远程的auto_test分支创建本地分支
或者使用IntelliJ IDEA创建本地分支:
步骤二、提交本地分支
on branch local_auto_test(在本地分支)
(1)执行命令:git add .
(2)执行命令:git commit -m '注释'
或者使用IntelliJ IDEA提交本地分支:
步骤三、Merge到远程仓库
(1)执行命令:git checkout auto_test //切换分支到auto_test
(2)执行命令:git merge local_auto_test //merge之前local_auto_test内容到本地auto_test分支
(3)执行命令:git push origin auto_test //将本地auto_test分支推送到远程服务器。
从远程仓库中抓取或拉取
1、抓取: git fetch (更新到本地仓库,不会自动merge到工作路径)
2、拉取 :git pull(更新到本地仓库,并且会自动merge到工作路径)