Git的起步流程
Posted 汤圆学Java
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git的起步流程相关的知识,希望对你有一定的参考价值。
初始化一个新的项目:
git init
// 初始化目录git remote add origin git@server-name:path/repo-name.git
// 连接远程库(提前建好的github项目地址)git add -A
// 添加所有新增加的文件git commit -m "test"
// 提交修改到本地仓库git push -u origin master
// 第一次提交到远程库时,用-u,以后直接git push origin master;
常用命令
git clone remoteRepoAddress
// 用来下载git上面的程序git remote rm origin
// 删除远程仓库地址git rm file
// 删除版本库、暂存区、工作区的文件(远程仓库文件还在)git checkout --
//从暂存区恢复到工作区- 直接运行
git checkout --
会打印出工作区所有的修改、删除(rm file)操作 - 然后再运行
git checkout -- *
就会撤销所有的修改、删除操作 - 注:如果删除操作是
git rm file
,则会删除掉暂存区的文件,此时checkout命令无效,需要先git reset HEAD file
把文件从版本库拉到暂存区,然后再git checkout -- file
进行恢复
- 直接运行
git reset HEAD
// 版本回退到最新版,从版本库恢复到暂存区- 只是暂存区内容回退,本地工作区不变,
HEAD
代表最新版本
- 只是暂存区内容回退,本地工作区不变,
git reset --hard HEAD
// 版本回退到最新版,从版本库恢复到暂存区- 包括暂存区、本地工作区
- 这个命令可以用来撤销本地修改、删除操作,恢复到版本库的状态,checkout 是恢复到暂存区的状态
常见问题
2021-11-2: mac上git bash命令行中文无法正常显示,而是显示为八进制
问题描述:
在Mac上的zsh终端界面,操作git时,显示的文件名如果有中文,会被格式化为八进制
解决办法:
设置git的core.quotepath=false
git config --global core.quotepath false
2021-9-22: git commit 之后,想要恢复怎么办
问题描述:
git commit 之后,想修改已经提交的注释,或者撤回commit的内容,怎么办
解决办法
- 如果只是想要修改提交的注释,执行
git commit --amend
,然后进入vim模式,修改刚才的备注,然后保存退出即可:wq
- 如果想要撤销提交的内容,有多种情况:
- –mixed :不删除工作空间改动代码,撤销commit,并且撤销git add . 操作; 这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
- –soft :不删除工作空间改动代码,撤销commit,不撤销git add
- –hard:删除工作空间改动代码,撤销commit,撤销git add . 注意完成这个操作后,就恢复到了上一次的commit状态。
2021-3-23: 多端修改同一个文件,导致冲突
问题描述:
- 两个电脑同时操作一个仓库,并修改了同一个文件a.txt
- 然后两个电脑都提交更新就会导致冲突
解决过程:
- 从头捋一下
- 电脑A和电脑B都修改了
a.txt
- 电脑A正常提交,成功
- 然后电脑B也提交
git push origin master
,这时就报错了,提示如下
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'github.com:Jalon2015/tangyuanxueJava.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.
- 意思是,远程有新版本,需要先
pull
- 接下来电脑B按照提示,执行
git pull origin master
,又报错了,提示如下
error: Your local changes to the following files would be overwritten by merge:
a
Please commit your changes or stash them before you merge.
- 意思是:你本地修改过的文件会被远程文件覆盖,请先提交本地文件
- 然后电脑B执行
git commit -a -m "change a"
,成功 - 接着电脑B再次执行
git pull origin master
,提示如下
Auto-merging a
CONFLICT (content): Merge conflict in a
Automatic merge failed; fix conflicts and then commit the result.
- 意思是:自动合并失败,请手动修改冲突的内容并再次提交
- 最后电脑B按照提示,修改了冲突内容(就是整合远程和本地的修改内容),再次执行
git commit -a -m "change a again"
- 接着执行
git push origin master
,成功 - 冲突解决
总结
总的来说,这种冲突就是因为双方没有及时沟通好导致的;
解决办法为四步,就是按照git提示去做:(前提是有一方已经成功提交到远程仓库)
- 另一方先提交本地修改
git commit -a -m "lalala"
- 然后拉取远程仓库的内容
git pull origin master
,会自动合并 - 如果合并失败,则修改内容(手动修改,远程和本地的不一致的地方);如果合并成功,则不用修改内容
- 再次提交
git commit -a -m "last"
,并推送到远程仓库git push origin master
2020-9-23:.gitignore 不生效
问题描述:
- IDE:VS Code
- 项目使用了一段时间后,感觉secret目录总是上传到云端不安全,所以想着去掉它;
- 接着我在
.gitignore
中新增了secret
,但是secret
目录没有变成灰色(即没有生效) - 而且当我提交到远程仓库时,发现远程仓库也还是存在
secret
目录
原因分析:
- 是因为添加
secret
到.gitignore
之前,secret
目录已经存在远程仓库中了 - 此时再把
secret
添加到忽略列表已经无效了 - 而是需要手动执行删除操作才可以(注:这里的删除指的是,只删除远程仓库的
secret
,本地的还保留,对应的命令是git rm --cached file
)
解决办法:
- 删除
secret
目录的缓存:git rm -rf --cached secret
- 此时再在
.gitignore
中添加secret
,就可以看到secret
目录变成了灰色(即生效了)
PS D:\\CompanyProject\\NodeProject\\factory-monitor-api> git rm -rf --cached secret
rm 'secret/secret.js'
PS D:\\CompanyProject\\NodeProject\\factory-monitor-api> git add -A
PS D:\\CompanyProject\\NodeProject\\factory-monitor-api> git commit -m "6"
[master f19cc22] 6
1 file changed, 33 deletions(-)
delete mode 100644 secret/secret.js
xxxx-xx-xx: 提交冲突
问题描述:
第一次提交代码到git的时候,如果远程地址已经有一些文件
- 开始可能会提示让你先pull,执行
git pull origin master
- 然后可能会提示
refusing to merge unrelated histories
,拒绝合并不相关的历史纪录
解决办法:
最后添加option再次执行pull:git pull --allow-unrelated-histories origin master
;
以上是关于Git的起步流程的主要内容,如果未能解决你的问题,请参考以下文章