Skip to content

笔记_Git

参考文献

简要摘记

git init # 只需一次
git add .   # 本地暂存
git status  # 
git commit -m "annotation" 
git remote add origin https://github.com/jimmmy0/repository1.git
git remote add origin git@new.github.com:IUSL-westlake/IUSL-westlake.github.io.git
git pull origin master 
git push -u origin master 
  • 问题 Please make sure you have the correct access right and the repository exists

    • bash git config user.name "IUSL-westlake" git config user.email "lijianan@westlake.edu.cn"
  • 注意 Support for password authentication was removed on August 13 意思是你原先的密码凭证从 2021 年 8 月 13 日开始就不能用了,必须使用个人访问令牌(personal access token),就是把你的密码替换成 token。解决方法就是添加如下口令即可

    bash git remote set-url origin https://<your_token>@github.com/<USERNAME>/<REPO>.git

多个github 账号

先参考这个,最终解决了我的问题 https://www.jianshu.com/p/3fc93c16ad2d

https://www.jianshu.com/p/89cb26e5c3e8

https://www.jianshu.com/p/a3b4f61d4747

思路

ssh 方式链接到 Github,需要唯一的公钥,如果想同一台电脑绑定两个Github 帐号,需要两个条件:

  1. 能够生成两对 私钥/公钥
  2. push 时,可以区分两个账户,推送到相应的仓库

解决方案:

  1. 生成 私钥/公钥 时,密钥文件命名避免重复
  2. 设置不同 Host 对应同一 HostName 但密钥不同
  3. 取消 git 全局用户名/邮箱设置,为每个仓库独立设置 用户名/邮箱

  4. 取消全局 用户名/邮箱 配置

    ```bash

    取消全局 用户名/邮箱 配置

    git config –-global –-unset user.name git config –-global –-unset user.email

    单独设置每个repo 用户名/邮箱

    git config user.email “xxxx@xx.com” git config user.name “xxxx” ```

  5. 到达新的repo, 设置新的用户名和email

    bash cd iusl/build git config user.name "IUSL-westlake" git config user.email "lijianan@westlake.edu.cn"

  6. 生成新的ssh keys. 输入的时候尽量输全地址

    bash ssh-keygen -t rsa -C "lijianan@westlake.edu.cn" /c/Users/Administrator/.ssh/id_rsa_new # 问的时候输入这个,注意原先已经有id_rsa

  7. 添加ssh key

    bash ssh-add /c/Users/Administrator/.ssh/id_rsa_new

    如果出现Could not open a connection to your authentication agent的错误,就试着用以下命令:

    bash ssh-agent bash ssh-add /c/Users/Administrator/.ssh/id_rsa_new

  8. 配置 .ssh/config文件

    bash touch config

    然后输入

    ```bash Host github.com #default
    HostName github.com User git IdentityFile ~/.ssh/id_rsa

    Host new.github.com # two
    HostName github.com User git IdentityFile ~/.ssh/id_rsa_new ```

  9. 将生成的 id_rsa.pubid_rsa_new.pub内容copy 到对应的 repo

  10. 添加新的SSH keys到新github账号的SSH设置中

  11. 测试一下是否可以

    bash ssh -T git@new.github.com ssh -T git@github.com

    Hi IEIT! You've successfully authenticated, but GitHub does not provide shell access. 出现这句,表示链接成功

  12. 命令行进入项目目录,重建 origin (whatever 为相应项目地址)

    bash git remote rm origin git remote add origin git@new.github.com:whatever

  13. 成功,可以 push 测试一下

    bash git push origin master

推送步骤

  • 在Github上新建一个仓库(repository)
  • 在本地创建项目文件夹,也即是本地仓库。我们的目标是要将本地仓库和远程仓库同步起来
  • cd 到本地仓库文件夹内,初始化本地仓库 git init,执行成功后,会在你的目录下生成一个.git的隐藏文件
  • git add . 表示把该目录下的所有文件加入到本地暂存区中。执行成功后不会有任何提示
  • git status该命令会把你本地工作区和暂存区的版本进行比较,查看当前的状态
  • git commit -m "这里是注释" 该命令会把本地暂存区中的文件提交到本地历史区,注意只有在本地历史区中的内容才能提交到github。执行该命令后,我们所有的文件都只是在本地。和github没有任何关系。
  • git remote add origin https://github.com/jimmmy0/repository1.git该命令是把本地历史区中的文件添加到github服务器的暂存区中。这一步是本地和远程服务器建立联系的一步。执行成功后不会显示任何结果
  • git pull origin master 该命令是先把github上的文件拉下来,注意在每次提交之前要首先进行pull,这是防止冲突。执行以后若出现问题,其实不用管,输入“:wq”回车键退出即可
  • git pull origin branchname --allow-unrelated-histories
  • git push -u origin master 向github提交,执行完成后,github上的repository就有和你本地一样的代码文件了。
  • 到github下查看代码是否上传成功

常用命令

分支操作

git branch 创建分支 git branch -b 创建并切换到新建的分支上 git checkout 切换分支 git branch 查看分支列表 git branch -v 查看所有分支的最后一次操作 git branch -vv 查看当前分支 git brabch -b 分支名 origin/分支名 创建远程分支到本地 git branch --merged 查看别的分支和当前分支合并过的分支 git branch --no-merged 查看未与当前分支合并的分支 git branch -d 分支名 删除本地分支 git branch -D 分支名 强行删除分支 git branch origin :分支名 删除远处仓库分支 git merge 分支名 合并分支到当前分支上

暂存操作

git stash 暂存当前修改 git stash apply 恢复最近的一次暂存 git stash pop 恢复暂存并删除暂存记录 git stash list 查看暂存列表 git stash drop 暂存名(例:stash@{0}) 移除某次暂存 git stash clear 清除暂存

回退操作

git reset --hard HEAD^ 回退到上一个版本 git reset --hard ahdhs1(commit_id) 回退到某个版本 git checkout -- file撤销修改的文件(如果文件加入到了暂存区,则回退到暂存区的,如果文件加入到了版本库,则还原至加入版本库之后的状态) git reset HEAD file 撤回暂存区的文件修改到工作区

标签操作

git tag 标签名 添加标签(默认对当前版本) git tag 标签名 commit_id 对某一提交记录打标签 git tag -a 标签名 -m '描述' 创建新标签并增加备注 git tag 列出所有标签列表 git show 标签名 查看标签信息 git tag -d 标签名 删除本地标签 git push origin 标签名 推送标签到远程仓库 git push origin --tags 推送所有标签到远程仓库 git push origin :refs/tags/标签名 从远程仓库中删除标签

常规操作

git push origin test 推送本地分支到远程仓库 git rm -r --cached 文件/文件夹名字 取消文件被版本控制 git reflog 获取执行过的命令 git log --graph 查看分支合并图 git merge --no-ff -m '合并描述' 分支名 不使用Fast forward方式合并,采用这种方式合并可以看到合并记录 git check-ignore -v 文件名 查看忽略规则 git add -f 文件名 强制将文件提交

git创建项目仓库

git init 初始化 git remote add origin url 关联远程仓库 git pull git fetch 获取远程仓库中所有的分支到本地

忽略已加入到版本库中的文件

git update-index --assume-unchanged file 忽略单个文件 git rm -r --cached 文件/文件夹名字 (. 忽略全部文件)

取消忽略文件

git update-index --no-assume-unchanged file

拉取、上传免密码

git config --global credential.helper stor

基本概念

  • 学习github基本概念和操作 https://guides.github.com/activities/hello-world/
  • Repository,项目仓库:used to organize a single project,can contain folders and files, images, videos, spreadsheets, and data sets
  • Branch,分支:Repositor 本身就是一个 Definitive Branch(Master Branch)
  • Branching is the way to work on different versions of a repository at one time;
  • A new branch called feature (because we’re doing ‘feature work’ on this branch)
  • Commits,修订,提交: = saved changes, 修订的部分;
  • Each verison of a porject is a commit;
  • Each commit has an associated commit message,修订说明, which is a description explaining why a particular change was made.
  • Pull Request, 合并请求,让别人合并你的修订

安装Git

  • 安装Git

bash sudo apt-get update sudo apt-get install git

  • 查看版本 bash git --version git version 2.11.0

  • 配置个人信息 bash git config --global user.name "Emma Paris" git config --global user.email "eparis@atlassian.com" git config --global core.editor nanoGit

建立版本库

  • 第一步创建版本库

bash mkdir learngit cd learngit

  • 第二步初始化版本库,通过git init命令把这个目录变成Git可以管理的仓库:

bash git init

创建完成后会多出一个 .git的文件夹,linux系统中使用 ls -ah 查看到; windows 系统中使用dir查看

  • 第三步编写文件,比如我们编写一个readme.txt文件

  • 第四步添加文件到版本库的暂存区,

bash git add readme.txt

  • 第五步提交, 把暂存区的文件版本提交到当前分支

bash git commit -m "annotation"

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

bash git add file1.txt git add file2.txt file3.txt git commit -m "add 3 files."

问题

  • 旧版本说明文档 https://toolchain.gitbook.com/
  • gitbook 安装步骤参考 http://www.chengweiyang.cn/gitbook/installation/README.html
  • Git 推送步骤 https://blog.csdn.net/sinat_20177327/article/details/76062030
  • 如果在git commit过程中碰到file name too long 的问题,使用 git config --system core.longpaths true