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的内容,怎么办

解决办法

  1. 如果只是想要修改提交的注释,执行 git commit --amend,然后进入vim模式,修改刚才的备注,然后保存退出即可:wq
  2. 如果想要撤销提交的内容,有多种情况:
    1. –mixed :不删除工作空间改动代码,撤销commit,并且撤销git add . 操作; 这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
    2. –soft :不删除工作空间改动代码,撤销commit,不撤销git add
    3. –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提示去做:(前提是有一方已经成功提交到远程仓库)

  1. 另一方先提交本地修改git commit -a -m "lalala"
  2. 然后拉取远程仓库的内容git pull origin master,会自动合并
  3. 如果合并失败,则修改内容(手动修改,远程和本地的不一致的地方);如果合并成功,则不用修改内容
  4. 再次提交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

参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值