git与github

最近研究了一下git和github。
网上找了些资料学习,做了点笔记,记录一波。
不足之处还请指出.

参考学习网址,强推廖雪峰老师的git教程:
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

关于作者

github: https://github.com/Sunyelw

gitee: http://gitee.com/Sunyelw

共同学习,共同进步。

执行命令,没有任何显示,表示执行成功,
Unix的哲学是“没有消息就是好消息”,说明执行成功。

一、基本操作

$ git config --global user.name "Your name"
$ git config --global user.email "eamil@address.com"

# 创建版本库 Repository
$ mkdir learngit
$ cd learngit
$ pwd
$ git init

$ git status
Changes ... 
        <filename1>
        <filename2>
        ...
# 下面的文件表明被修改,注意:是修改之前就存在的文件.

Untracked ... 
        <filename1>
        <filename2>
        ...
# 下面的文件表明未提交,是之前从来没有存在的,属于新增.

### ### ### ### ### ### ### ### ### ### ### ### ### 
PS:以上两者都需要用 add 命令提交[文件更改]到暂存区(stage/index),
然后把这一步都做完了, 就可以把[修改]提交到分支了,用 commit -m 命令.
### ### ### ### ### ### ### ### ### ### ### ### ### 

Change not staged for commit ...
        <filename1>
        <filename2>
        ...
no change added to commit<use "git commit -a" or "git add ">
# 这是表示你修改了 <filename>文件 但是没有执行 
# add <filename> 命令,你需要执行此命令提交到暂存区.

Changes to be committed ....
        <filename1>
        <filename2>
        ...
# 然后下面是一串文件名,表示你已经添加到暂存区的文件(执行了"git add <filename>"命令),等待提交到分支.

# 一些命令
$ git diff <filename> # 文件名数字好像不支持。
$ git add . # 提交所有修改与新增到暂存区(stage/index)
$ git add <filename> # 提交指定文件到暂存区
$ git cat <filename> # 查看当前文件内容
$ git commit -m "description" # 从暂存区提交到分支
$ git push origin master # 提到到远程库

# 提交: git push (-u) [库名称] [分支名]

# 关联远程库
$ git remote add origin git@github:Sunyelw/TestGit.git
# 如果报错已存在 origin,那就换个名字,不用origin,比如ori也行

# 删除已有的远程库。
$ git remote rm origin 
$ git remote rm <repo-name> # 自定义的名称,一般是origin
# 关联多个远程库
$ git remote add github git@github.com:Sunyelw/TestGit.git  # 库名:github
$ git remote add gitee  git@gitee.com:Sunyelw/TestGit.git   # 库名:gitee

# 查看远程库
$ git remote -v

# 时光穿梭
$ git log
$ git reset --hard HEAD^
$ git reset --hard HEAD^^  # HEAD^100
$ git reset --hard fe194ab # 回 溯

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

# 配置别名
$ 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.lg "log --color --graph --pretty=format:'%Cred%h%Creset -  %C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
注:--global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用。

# 删除别名
$ git config --global --unset alias.st

配置文件一样有3层,系统级,用户级,项目级。
加了--global选项的,表示配置到了用户级,--system是系统级,win是在安装目录(如C:\Program Files\Git\mingw64\etc),若没有不加就在项目级中。

在命令行中,起同样的别名,前面的会被直接覆盖。
如果别名是其本身的命令,比如git config --global alias.add commit,
再运行git add时仍然是原add暂存功能,优先识别内置的命令,其次才别名。

# 查看版本号
$ git reflog 
$ git log --graph --pretty=format:'%h -%d %s (%cr)' --abbrev-commit --reflog
# shift+ ; +q  # 退出。

add: 工作区(即初始创建的仓库:文件夹TestGit)-->版本库(.git)中的暂存区stage(index)
# .git文件夹隐藏在仓库内,但并不算工作区,而是版本库(repository)
commit: stage  -->  master(当前分支,例如master)

# 推送
$ git push origin master 

二、进阶

# 克隆。
$ git clone git@github.com:Sunyelw/TestGit.git
$ git clone [URL]//  HTTPS/SSH  协议。
# ps:SSH 速度更快。

# 克隆指定分支的项目
$ git clone [-b <分支名称>] <url>
# 分支 branch
创建+切换 $ git checkout -b dev//" $ git branch dev" + "$ git checkout dev"
创建 $ git branch dev
切换 $ git checkout dev
查看 $ git branch
删除 $ git branch -d dev
合并至当前分支: $ git merge dev//把dev分支的最新代码合并到master内。

存储工作现场: $ git stash
查看存储工作: $ git stash list
恢复现场工作: ① $ git stash apply +$ git stash drop
               ② $ git stash pop
               ③ $ git stash apply stash@{0}

bug修复:出现bug100,先stash工作现场,然后切换到想要修复bug100的分支,比如master,再度当前分支创建临时分支 issue-100,修复后合并 删除临时分支 issue-100.

标签:
# 创建
$ git tag <tagname>
$ git tag -a v1.0       -m "description"  <commit number>
$ git tag -s <tag name> -m "description" <commit number>
# 上传
$ git push t```````
g <tag name>   #单个
$ git push origin --tags    #所有
# 删除
$ git tag -d <tag name>            #本地删除
$ git origin: refs/tags/<tag name> #远程删除

多提一句,码云(gitee.com)其实就是一个中文版的GitHub,而且支持私有化你的项目,很强大,嗯,我赌五毛这两者肯定有PY关系…

这里讲下工作区、暂存区、分支三者的关系。如图:

这里写图片描述

工作区就是你的仓库,那个 .git 文件同一路径下的都是工作区,
除了那个 .git 。 没错 .git 是版本库,这里面有暂存区和分支。

diff的用法

$ git diff HEAD – a.txt # 比较工作区的当前版本与 版本库里面提交(commit)的最新版本间的区别,
而不是与版本库里暂存区内的版本作比较。

git diff 是工作区和暂存区的对比

git diff – cached 是暂存区和分支的对比

git diff HEAD – readme.txt 工作区和分支的对比

三、常见问题(不定时添加)

  1. 推送失败问题
$ git push origin master
To github.com:Sunyelw/TestGit.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@github.com:Sunyelw/TestGit.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details. ##

在我们利用git作为项目版本控制时, 工作流程通常是这样的:
(1)在每天开始工作前, 先把中央仓库里的最新代码给pull下来, 然后你可以进行你的工作, 创建新分支或提交之类.
(2)一天的工作结束后, 你需要把代码push到仓库.

如果没有第一步操作, 你push的时候就可能会出现上面这种情况.
有两种解决方法:
(1) 先pull下来, 然后解决冲突, 再次提交.(这里假设只有一个a.txt文件有冲突, 通常情况是不可能这么舒服滴…..)

$ git pull
$ git cat a.txt
$ git vim a.txt
$ git add a.txt
$ git commit -m "kill confliction"
$ git push origin master

(2)rebase 或 merge

$ git rebase origin master

或者

$ git merge orgin

merge跟rebase的区别就是历史记录, 如果你不确定用哪种,请用pull.
其实pull是下面两步操作合并而成的:

$ git fetch
$ git merge origin/master

更新于 2017-12-30 16:50

2 合并失败问题
应用场景,我本地有一个文件夹,我想把这个文件夹放到我的码云库上面。
我的做法:
(1)码云上建了一个库
(2)在我这个文件夹里面关联这个库。
(3)然后出现推送失败问题。
这里写图片描述

按提示解决:
1.关联上传流

git push --set-upstream origin master

2.合并(这里无法使用git pull 来将远程分支里面的东西拉下来,因为 unrelated)

git merge origin/master --allow-unrelated-histories

这里写图片描述

ps: 还要一种操作

git pull --rebase origin master

同样是拉取.

3.推送

git push

更新于2018-01-31 16:31

更新于2018-04-01 16:33
end.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值