目录
1.5 修改的本地项目(未建立git仓库)推送到远程已有的仓库
1. 常见应用
1.1 向github上传代码
在本地项目右键打开Git bash Here
//初始化
git init
//登录
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
//生成密钥对 成功后,去对应的目录下找到这个.ssh文件,然后将其拷贝到项目根目录下
ssh-keygen -t rsa -C "your_email@youremail.com"
在github上新建 SSH key
//将 .ssh/id_rsa.pub中的内容复制作为key的内容
//检查秘钥对是否可用 "successfully"字样即可用
ssh -T git@github.com
//连接到远程仓库 使用项目中的SSH
git remote add origin git@github.com:KilterW/ManagementSystem.git
//添加
git add .
//提交
git commit -m "record commit"
//推送
git push -u origin 分支名 eg:git push -u origin main (2020年10月1日后,Github
将所有新建的仓库的默认分支从master
修改为main
)
1.2 已经上传到github后,更新修改到github:
//添加所有修改
git add -A
//提交
git commit -m "提交说明"
//推送
git push
1.3 拉取代码
git init
git remote add origin http:...git
git pull origin master
1.4 远程仓库同步到本地仓库
git fetch origin master //
把远程库更新到本地
git log master.. origin/master //
比较远程更新和本地版本库的差异
git merge origin/master //
合并远程库
1.5 修改的本地项目(未建立git仓库)推送到远程已有的仓库
git init //先初始化空仓库
git remote add origin http:...git
git pull origin master
将本地已修改的文件直接替换刚从远程拉取的文件
git status //可查看当前工作区状态
git add -A
git commit -m "提交说明"
git push origin master
1.6 远程版本回退(同时删除提交记录)
git reflog
git reset --hard Obfafd //本地版本回退
git push -f // 强制推送到远程分支,需要解除分支保护
1.7 执行commit后,还未push,撤销Commit
git reset --soft HEAD^ //不删除工作空间的改动代码 ,撤销commit,不撤销git add file
1.8 只提交部分修改的文件
git status 查看仓库状态
git add 文件名 添加需要提交的文件名(加路径--参考git status 打印出来的文件路径)
git stash -u -k 忽略其他文件,把现修改的隐藏起来,这样提交的时候就不会提交未被add的文件
git commit -m "哪里做了修改可写入..."
1.9 .gitignore文件不起作用的解决方法
git清除本地缓存(改变成未track状态),然后再提交:
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
git push -u origin master
github打不开时,可以尝试使用ipconfig/flushdns清除DNS缓存
2. 常见命令
2.1 创建与合并分支
1、 从master分支创建dev分支并切换到dev分支:
1. git checkout master
2. git checkout -b dev
其中,git checkout -b dev 等价于:
3. git branch dev
4. git checkout dev
查看本地当前的分支,分支前面带“*”表示当前分支,剩下的分支表示本地有的分支:
5. git branch
查看远程全部的分支,白色的表示本地有的,红色的表示本地没有,仅在远程存在:
6. git branch -a
2、修改代码、提交代码(当前的操作是在dev分支上进行)
7. git add a.html
8. git commit -m "提交文件a.html"
3、分支合并(将dev合并到master)
9. git checkout master
10. git merge dev
4、合并完成后,删除dev分支.(删除dev分支时,注意我们当前所在的分支不能是dev分支)
11. git branch -d dev
5、删除后,查看分支(此时看不到dev分支了)
12. git branch
6、总结 :工作中经常从master创建新的分支,具体操作如下:
13. git checkout master
14. git checkout -b issues1234
15. git push origin issues1234
16. git add ..
17. git commit -m "***"
18. git push origin issues1234
注意:将本地分支branch1推到远端的branch2操作步骤:
19. git push origin branch1:branch2
7、删除分支
20. git branch -D issues1234 //本地强制删除分支issues1234
21. git push origin :issues1234 //推到远程
22. 删除远程分支
git push origin --delete 分支名
8、将远程git仓库里的指定分支拉取到本地
23. git checkout -b 本地分支名 origin/远程分支名
9、推送本地分支到远程仓库
24. git push --set-upstream origin 分支名
2.2 解决冲突
1、发生冲突的文件
25. <<<<<<< HEAD
26. Creating a new branch is quick & simple.
27. =======
28. Creating a new branch is quick AND simple.
29. >>>>>>> feature1
其中,git使用 <<<<<<<, =======, >>>>>>> 标记文件中自己和别人产生冲突的部分。
在 <<<<<<<, ======= 之间为自己的代码;
=======, >>>>>>> 之间为别人的代码。
如果保留自己的代码,将别人的代码删掉即可。
2、冲突解决后提交
30. git status
31. git add ***
32. git commit -m "fix conflict"
33. git push origin 分支名
2.3 Bug分支
1、储藏更改:将当前更改的代码储藏起来,等以后恢复使用
34. git stash
使用git stash save "save message" : 执行存储时,添加备注,方便查找
2、恢复储藏的代码
35. git stash pop //恢复的同时把stash内容删掉
或者
36. git stash apply //恢复stash,但是stash内容并不删除
37. git stash drop //在上面操作的基础上,以此来删除stash
注: git stash list //查看全部的stash列表。
3、将stash空间清空
38. git stash clear
4、git stash pop 和 git stash apply 区别
原来git stash pop stash@{id}命令会在执行后将对应的stash id 从stash list里删除,而 git stash apply stash@{id} 命令则会继续保存stash id。
最新一次的stash的id为0
2.4 版本回退
1、回退至上一个版本
39. git reset --hard HEAD
2、回退至指定版本
40. git reset --hard 版本号
3、查看以往版本号(本地的commit)
41. git reflog
4、查看各版本号及信息(所有的commit:本地commit + 其他同事的commit)
42. git log
5、回退指定的文件
43. git reset --hard HEAD <文件名>
2.5 撤销修改
1、撤销修改
44. git checkout -- a.html
分两种情况分析:
45. 还没有执行 git add 操作,执行上面的操作后,会恢复到和版本库中一模一样的版本状态。
46. 执行了git add ,还没执行 git commit ,再执行上面的操作后,会恢复到git add 结束后的状态
注:一旦执行了git commit -m "*",就不能再使用上面的命令回退。
2.6 对于已经push的版本,进行回退
1、第一步:
47. git reset --hard 版本号 //本地回退到指定的版本
2、第二步:
48. git push -f origin dev //将远程的也回退到指定版本
2.7 本地同步远程删除的分支
49. git fetch origin -p //用来清除已经没有远程信息的分支,这样git branch -a 就不会拉取远程已经删除的分支了
2.8 删除掉没有与远程分支对应的本地分支
从gitlab上看不到的分支在本地可以通过git branch -a 查到,删掉没有与远程分支对应的本地分支:
50. git fetch -p
2.9 查看远程库的一些信息,及与本地分支的信息
51. git remote show origin
2.10 git stash临时保存本地操作
1、使用 git stash 就可以将你当前未提交到本地(和服务器)的代码推入到Git的栈中,这时候你的工作区间和上一次提交的内容是完全一样的。
2、再切换到别的分支改紧急bug。
3、改完后,切到刚才的分支,使用 git stash apply 将以前一半的工作应用回来。
也许有的人会说,那我可不可以多次将未提交的代码压入到栈中?答案是可以的。当你多次使用 git stash 命令后,你的栈里将充满了未提交的代码,这时候你会对将哪个版本应用回来有些困惑, git stash list 命令可以将当前的Git栈信息打印出来,你只需要将找到对应的版本号,例如使用 git stash apply stash@{1} 就可以将你指定版本号为stash@{1}的工作取出来,当你将所有的栈都应用回来的时候,可以使用 git stash clear来将栈清空。
在这里顺便提下 git format-patch-n , n是具体某个数字, 例如 git format-patch-1 这时便会根据log生成一个对应的补丁,如果 git format-patch-2 那么便会生成2个补丁,当然前提是你的log上有至少有两个记录。
2.11 删除文件
1、删除本地文件
52. git rm -r 文件名
2、删除远程文件保留本地
53. git rm -r – cached 文件名
2.12 git diff 用法
1. 比较工作区与暂存区
git diff 不加参数即默认比较工作区与暂存区
2 比较暂存区与最新本地版本库(本地库中最近一次commit的内容)
git diff --cached [<path>...]
3 比较工作区与最新本地版本库
git diff HEAD [<path>...] 如果HEAD指向的是master分支,那么HEAD还可以换成master
4 比较工作区与指定commit-id的差异
git diff commit-id [<path>...]
5 比较暂存区与指定commit-id的差异
git diff --cached [<commit-id>] [<path>...]
6 比较两个commit-id之间的差异
git diff [<commit-id>] [<commit-id>]
7 使用git diff打补丁
git diff > patch //patch的命名是随意的,不加其他参数时作用是当我们希望将我们本仓库工作区的修改拷贝一份到其他机器上使用,但是修改的文件比较多,拷贝量比较大,
此时我们可以将修改的代码做成补丁,之后在其他机器上对应目录下使用 git apply patch 将补丁打上即可
git diff --cached > patch //是将我们暂存区与版本库的差异做成补丁
git diff --HEAD > patch //是将工作区与版本库的差异做成补丁
git diff Testfile > patch//将单个文件做成一个单独的补丁
8.查找所有被删除的文件
git log --diff-filter=D --summary
2.13 git config配置
54. 查看配置
git config -l
3. 常见报错
1、报错:“git remote: HTTP Basic: Access denied ”
原因:本地git配置的用户名、密码与gitlabs上注册的用户名、密码不一致。
解决方案:
1. 如果账号密码有变动 用这个命令 git config –system –unset credential.helper 重新输入账号密码 应该就能解决了
2. 如果用了第一个命令 还不能解决问题那么 用这个命令:git config –global http.emptyAuth true
3.如果以上两个方法不起作用,那么采用以下方法:
进入控制面板》用户账号》凭据管理器?windows凭据》普通凭据,在里面找到git,点开编辑密码,更新为最新密码之后就可以正常操作了
2、 git分支跟踪远程分支
1. 建立develop分支,并且让develop分支追踪origin/develop远程分支。
git checkout -b develop origin/develop
2. 设置当前分支跟踪远程分支origin/serverfix
git branch -u origin/serverfix
3、 git分支Merging状态
原因:合并时发生冲突,会在分支名后跟Merging eg:(aa|MERGING)
解决:回退到merge之前的版本 git reset --merge HEAD^
4、warning: LF will be replaced by CRLF in XXXX.xaml.cs.
① Uinx/Linux采用换行符LF表示下一行(LF:LineFeed,中文意思是换行)
② Dos和Windows采用回车+换行CRLF表示下一行(CRLF:CarriageReturn LineFeed,中文意思是回车换行)
出现这个警告是因为不同的系统存在换行符号转义不一致
解决:如果是Windows程序员,且正在开发仅运行在Windows上的项目,可以设置false取消此功能,把回车符记录在库中:
$ git config --global core.autocrlf false
5、取消推送时的登录页面
解决:输入以下两行指令,账号密码会被缓存,下次就不用再输入了
git config --global --unset credential.helper
git config --global credential.helper store
6. git 拉取代码时报错:Access Denied (拒绝访问)
解决:在控制面板 -> 用户帐号 -> 凭据管理器 -> 管理windows凭据 -> 普通凭据 -> 选择对应 git 地址,编辑修改用户名或密码 -> 保存即可。
7. git log 退出方法:
解决:按字母Q即可退出
8. git 在pull或者合并分支的时候有时会遇到提示:Please enter a commit message to explain why this merge is necessary
解决: ①.按键盘字母 i 进入insert模式
②.修改最上面那行黄色合并信息,可以不修改(合并的注释)
③.按键盘左上角"Esc"
④.输入":wq",注意是冒号+wq,按回车键即可