关于git:git笔记

4次阅读

共计 5981 个字符,预计需要花费 15 分钟才能阅读完成。

git 笔记

gitlab   gitee   github


1、根底操作

1.1、常用命令

git 常识大全

提交代码
 git status -sb
 git add .
 git commit -m "fix"
 git push origin dev_20190510001

查问状态
git status

查看日志
 git log --stat
 git reflog --date=iso

建设分支
 git status -sb
 git checkout -B dev_20190510001
 git push
 git push --set-upstream origin dev_20190510001
展现文件  ls
删除文件  git rm test2.txt 
撤销操作  git checkout -- test.txt

增加文件到缓存:git add test.txt    单个文件
 git add .           当前目录全副文件

提交 (蕴含正文) 到本地仓库:git commit -m '第一次版本提交' 


上传文件到近程仓库:git push origin [本地分支名]:[远端分支名]  
 当然如果你的本地分支名和远端分支名是一样的,那么就只须要 git push origin [分支名称]就能够了。git push 

复原最近版本文件
 git fetch
 git reset --hard origin/master   // 复原到近程仓库,删除 git add 和 commit 的文件

 
git pull   拉取 从近程拉取最新版本到本地,并主动合并 merge
git fetch  获取 从近程获取最新版本到本地,不会主动合并 merge,须要手动合并
git merge  合并 应用 fetch 能够在 merge 之前能够看清楚更新状况,再决定是否合并。git merge --abort  停止合并



git 一个分支齐全笼罩另一个分支,如下:dev_20210729 笼罩 develop
$ git checkout develop
$ git reset --hard dev_20210729
$ git push origin develop --force


不容许推送  You are not allowed to force push code to a protected branch on this project
"Settings" -> "Repository" -> scroll down to "Protected branches".
git 回滚之前的版本  http://www.cnblogs.com/yu-hailong/p/10681905.html
git log   查问日历记录
git reset --hard 5fa86ae3758e7e2a86825452977da40f34b6dd58   回滚到之前的版本
git push origin HEAD --force   强制提交

还原本地文件 git reset -hard 

 git reset —soft + 版本号
  回退到某个版本,只回退了 commit 的信息,不会扭转曾经批改过的代码。git reset --soft HEAD^
  
 git reset —hard + 版本号
     git reset --hard orgin
  彻底回退到某个版本,本地的代码也会扭转上一个版本内容。#本地仓库回退到某个版本    git reflog --date=iso
 git reset -–hard bae168  
 
 #本地仓库回退到上一次提交  
 git reset –-hard 
 
 git reset --hard HEAD

 回退到以后版本的前一个版本
 git reset --hard HEAD^

 回退到以后版本的上上个版本
 git reset --hard HEAD^^

 回退到以后版本之前的 100 个版本
 git reset --hard HEAD~100
 

 抛弃本地提交,强制回到线上最新版本
 git fetch --all
 git reset --hard origin/ 你须要下拉的分支(默认 master) 
 git fetch

 

1.2、配置

vi /etc/ssh/sshd_config

查看版本:git --version

查看配置:git config --list

设置配置:git config --global pack.windowMemory 1024m

 git config --global pack.packsizelimit 1g
 
 git config --global http.postBuffer 1g

删除配置:git config --global --unset pack.deltacachesize
 

1.3、分支

https://edu.aliyun.com/jiaocheng/1834?spm=5176.11182473.menu.7.k6ksTN

创立分支命令(复制以后分支下文件):git branch (branchname)
 
提交分支到仓库命令:git push origin (branchname)

切换分支命令:
 git checkout (branchname)
 
列出分支根本命令:git branch -a

删除分支命令:git branch -d (branchname)
 
创立新分支并立刻切换到该分支下
 git checkout -b newtest
  有同名分支会提醒谬误
  
强制创立新分支,并且会笼罩原来存在的同名分支
 git checkout -B new_branch


设置本地分支关联近程分支
 git push --set-upstream origin 
 
 
合并分支:git checkout master
 git merge test   // test 分支合并到 master 分支
 git push origin master
 

查看分支      git branch -a
删除本地分支  git branch -D branch-name
删除近程分支  git push origin --delete branch-name
     
     
查看以后配置有哪些近程仓库
 git remote -v
 

彻底删除文件 -- 会删除对应提交记录(蕴含失常文件的提交历史)git filter-branch --force --index-filter 'git \
rm --cached --ignore-unmatch test 彻底删除.txt' \
--prune-empty --tag-name-filter cat -- --all
git push --all --force
 
批改分支名称 https://www.jianshu.com/p/cc740394faf5

a. 重命名近程分支对应的本地分支
git branch -m oldName newName

b. 删除近程分支
git push --delete origin oldName

c. 上传新命名的本地分支
git push origin newName

d. 把批改后的本地分支与近程分支关联
git branch --set-upstream-to origin/newName


2、高级操作

2.1、查看文件状态及日志

 
git status 命令用于查看我的项目的以后状态。git status -s  查看详情

 
git diff   
git diff --stat

执行 git diff 来查看执行 git status 的后果的详细信息。git diff 命令显示已写入缓存与已批改但尚未写入缓存的改变的区别。git diff 有两个次要的利用场景。尚未缓存的改变:git diff 
 查看已缓存的改变:git diff --cached 
 查看已缓存的与未缓存的所有改变:git diff HEAD 
 显示摘要而非整个 diff:git diff --stat

退出 git diff  : q


查看全副分支的曾经 commit 然而没有 push 的:git log --branches --not --remotes
 
 git cherry -v   只能查看未传送提交的形容 / 阐明
 git log master ^origin/master  则能够查看未传送提交的详细信息
 

查看全副分支的全副的最近的 commit:git log --branches --not --remotes --simplify-by-decoration --decorate --online

查看日志
 git log
 git log --oneline -3    以后分支的最近三次提交记录
 
 git log --stat     https://www.cnblogs.com/fancyop/p/Git_Log.html
 用来显示每次提交的上面列出所有被批改过的文件、有多少文件被批改了以及被批改过的文件的哪些行被移除或是增加了。在每次提交的最初还有一个总结。git reflog              所有分支的记录
 git reflog --date=iso 

2.2、stash 暂存

git stash:       备份以后的工作区的内容,从最近的一次提交中读取相干内容,让工作区保障和上次提交的内容统一。同时,将以后的工作区内容保留到 Git 栈中。git stash pop:   从 Git 栈中读取最近一次保留的内容,复原工作区的相干内容。因为可能存在多个 Stash 的内容,所以用栈来治理,pop 会从最近的一个 stash 中读取内容并复原。git stash list:  显示 Git 栈内的所有备份,能够利用这个列表来决定从那个中央复原。git stash clear: 清空 Git 栈。此时应用 gitg 等图形化工具会发现,原来 stash 的哪些节点都隐没了。git stash apply  复原暂存之后不删除暂存
git stash pop   复原暂存之后删除暂存
git stash drop   从 Git 栈删除最旧的一个暂存

2.3、批改正文信息

git 应用 amend 选项提供了最初一次 commit 的反悔。然而对于历史提交呢,就必须应用 rebase 了。git rebase -i HEAD~3 
示意要批改以后版本的倒数第三次状态。这个命令进去之后,会进去三行东东:pick:******* 

pick:******* 

pick:******* 

如果你要批改哪个,就把那行的 pick 改成 edit,而后退出。这时通过 git log 你能够发现,git 的最初一次提交曾经变成你选的那个了,这时再应用:git commit --amend 

来对 commit 进行批改。:wq 

批改完了之后,要回来对不对?应用 git rebase --continue 
git rebase --abort

OK,所有都搞定了。https://xiewenbo.iteye.com/blog/1285693
复原已删除分支
https://blog.csdn.net/changerzhuo_319/article/details/81133533    
git reflog --date=iso
git checkout -b reback_remove_branch ddd94a4

2.4、撤销

git commit 之后如何撤销


git log  查问提交记录

如果在 git commit 之后,须要撤回 commit 个别有以下三种形式

1.git reset --soft 版本号 
git reset --soft HEAD^  // 回到上一个版本
git reset --soft 9478618f5b73885e3b5dd0ff946ae557b86c7560
不删除工作区改变的代码,撤销 commit,不撤销 git add .


2.git reset --mixed 版本号 
git reset --mixed HEAD^  // 回到上一个版本
git reset --mixed 9478618f5b73885e3b5dd0ff946ae557b86c7560
不删除工作区改变的代码,撤销 commit,撤销 git add .


3.git reset --hard 版本号 
git reset --hard HEAD^  // 回到上一个版本
git reset --hard 9478618f5b73885e3b5dd0ff946ae557b86c7560
删除工作区的代码,撤销 commit,撤销 git add . 回到上一次 commit 的状态


参考 https://blog.csdn.net/weixin_44843859/article/details/111385032

git revert 撤销版本


git revert -n 9478618f5b73885e3b5dd0ff946ae557b86c7560

https://blog.csdn.net/yxlshk/article/details/79944535
https://segmentfault.com/a/1190000012897697

3、问题

3.1、github 增加 ssh 公钥

 
## github 增加 ssh 公钥  git clone

关上 git bash

ssh-keygen -t rsa

cat ~/.ssh/id_rsa.pub

增加到 https://github.com/settings/keys   顺次点击 "Setting -> SSH Keys"->"New SSH key"

ssh -T git@github.com

git clone git@github.com:scott180/MyNotes.git

3.2、提交及更新失败

用 git pull 来更新代码的时候,遇到了上面的问题:error: Your local changes to the following files would be overwritten by merge:  
    xxx/xxx/xxx.php  
Please, commit your changes or stash them before you can merge.  
Aborting


https://www.cnblogs.com/xd502djj/p/6973477.html

解决办法:办法 1、暂存本地文件,下载最新代码。复原本地批改的代码,批改抵触的文件,提交代码。git stash           // 暂存
git pull            // 下载最新代码
git stash pop        // 复原暂存文件

git status                      // 查问状态
git add xxx/xxx/Test.java       // 提交文件   不能应用全副提交:(git add .)git commit -m "fix"             // 正文
git push                        // 提交文件


办法 2、放弃本地批改文件,下载最新代码
git reset --hard
git pull

GIT 拉取代码的时候提醒 AUTHENTICATION FAILED FOR []

解决办法:输出 git config --global credential.helper store  
而后 git pull  输出账号密码

或者革除明码
git config --system --unset credential.helper

在 git(小乌龟)向 github 近程推送(push)文件是会报一个异样 no supported authentication methods avaiable         
https://blog.csdn.net/Maxiao1204/article/details/81476618

解决办法:因为 git(小乌龟)和 Git 的抵触咱们须要把乌龟 git 设置改过如下。找到 TortoiseGit--》Settings--》Network

将 SSH client 指向 D:\git\usr\bin\ssh.exe(我的 Git 工具装置在 d 盘)这里更改 ssh 门路的时候,要把下面的“应用代理服务器”勾打上,点击利用,再确定
正文完
 0