git笔记


绑定用户

    git config --global user.name "Taury"
    git config --global user.email "183********@163.com"

本地生成ssh key 并添加到gitee

    ssh-keygen -t rsa -C "183********@163.com"
    cat ~/.ssh/id_rsa.pub 
    ssh -T git@gitee.com  #添加主机到本机SSH可信列表

    若添加公钥后仍需要输入用户名和密码,则修改连接方式为ssh
    已克隆的仓库修改 .git/config 文件中 url=https://gitee.com/Name/project.git 为 url=git@gitee.com:Name/project.git

创建本地仓库

    git init

克隆仓库到本地

    ssh  方式:git clone git@github.com:Taury/monamie.git [dst_dir] /* 本地目录不可以是仓库 */
    https方式:git clone https://github.com/Taury/monamie.git [dst_dir]

克隆子模块

git submodule update --inint

添加文件到缓存

    git add <file> 	/* git add . 将当前目录下所有为未跟踪的文件全部添加到缓存 */

    git reset HEAD <file>    /*取消已缓存的文件*/

提交文件到仓库

	git commit [file] -m "备注"

	git rm <file>	/*从仓库中移除文件*/
        git rm -f <file> /*删除之前修改过并且已经放到暂存区域的文件 */

关联远程仓库

	git remote add orgin git@github.com:Taury/monamie.git

查看关联的远程仓库

git remote -v

上传本地代码到远程仓库

	git push -u origin master /* 注意:github不能管理空文件夹 */

分支

获取当前分支名称

git rev-parse --abbrev-ref HEAD

查看所有分支(包括远程分支)

git branch -v

查看远程分支

git branch -r

创建分支

git branch [分支名] #仅创建分支

git checkout -b [分支名] #创建分支并切换到新分支

删除分支

git branch -d [分支名]

切换分支

注:git add, git commit之后更改内容才保存到分支

git checkout [分支名]

同步分支文件

git checkout branch2  #当前分支为branch2
git checkout branch1 file #同步branch1分支中的file文件到branch2分支上

版本回退

git reset HEAD^ #回退所有内容到上一个版本

git reset HEAD^^ #回退所有内容到上上一个版本

git reset HEAD^^^ #回退所有内容到上上上一个版本
...

git reset HEAD~1 #回退所有内容到上一个版本
...


git reset HEAD^ file #回退file文件的版本到上一个版本

git reset --hard [版本号] #回退之前某个版本

拉取

git pull origin master

  • 浅克隆:拉取最近一次的变更,忽略以前的变更记录,在拉取时可以加参数depth,如
git pull --depth=1 origin master 

稀疏检出

稀疏检出(sparse checkout ): 只获取部分目录的内容 (参考文章

# 打开sparse checkout功能
git config core.sparsecheckout true 

# 添加2个目录到checkout的列表。路径是版本库下的相对路径
echo "path1/" >> .git/info/sparse-checkout
echo "path2/" >> .git/info/sparse-checkout

# 更新checkout的列表
git checkout master
或者
git read-tree -mu HEAD

关闭sparse checkout功能:
仅修改core.sparsecheckout为false是不生效的,
需要修改 .git/info/sparse-checkout 文件,用一个”*“号替代其中的内容,
然后执行 checkout 或 read-tree 命令。

sparse-checkout 文件设置

  • 子目录的匹配
    在 sparse-checkout 文件中,如果目录名称前带斜杠,如/docs/,将只匹配项目根目录下的docs目录,如果目录名称前不带斜杠,如docs/,其他目录下如果也有这个名称的目录,如test/docs/也能被匹配。
    而如果写了多级目录,如docs/05/,则不管前面是否带有斜杠,都只匹配项目根目录下的目录,如test/docs/05/不能被匹配。

  • 通配符 "*" (星号)
    在 sparse-checkout文件中,支持通配符 "*",如可以写成以下格式:

  1. *docs/
  2. index.*
  3. *.gif
  • 排除项 “!” (感叹号)
    在 sparse-checkout 文件中,也支持排除项 “!”,如只想排除排除项目下的 “docs” 目录,可以按如下格式写:
  1. /*
  2. !/docs/

注:如果要关闭sparsecheckout功能,全取整个项目库,可以写一个"*"号,但如果有排除项,必须写"/*",同时排除项要写在通配符后面。

报错解决:

git rm --cached [file]: 从stage(index,暂存区) 里面删除文件,当你提交(commit)之后文件就会删除了。

git reset HEAD [file]:  回退暂存区里的文件(还原为HEAD commit里面该文件的状态),会撤销从上一次提交(commit)之后的一些操作。

	如果是对于新增文件,这两个操作时等效的。

	这两个命令都是对stage,index的操作。

git rm和rm的区别
	用 git rm 来删除文件,执行 git commit -m [file] 提交时会将这个删除操作记录下来;

	用 rm 来删除文件,仅仅是删除了物理文件,使用 git commit -am [file] 提交才会将删除文件的操作提交上去。

git push 时报错,error: failed to push some refs to

 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:Taury/CHAT.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

是因为远程repository和本地的repository冲突导致的,在创建版本库后,添加了README.md,但是却没有pull到本地。

解决方法:

1.使用强制push的方法:(不可取,会造成远程修改丢失)

	$ git push -u origin master -f 

2.push前先将远程repository修改pull下来

	$ git pull origin master

	$ git push -u origin master

3.若不想merge远程和本地修改,可以先创建新的分支后再push

	$ git branch [name]

	$ git push -u origin [name]

如果是使用vmware安装的linux系统,由于共享文件夹文件系统与linux系统的文件系统的差异,不支持创建硬链接等操作的原因,在共享目录下进行git clone等操作会报以下错误:
fatal: 'origin' does not appear to be a git repository
fatal: Could not read from remote repository.

    Please make sure you have the correct access rights and the repository exists.

当git add -A时出现warning: LF will be replaced by CRLF问题

原因:由于编辑器的不同或者文件行尾的换行符在 Windows 下被替换了

  • Dos和Windows平台: 使用回车(CR)和换行(LF)两个字符来结束一行,回车+换行(CR+LF),即“\r\n”;
  • Mac 和 Linux平台:只使用换行(LF)一个字符来结束一行,即“\n”;

解决方法:

git config --global core.autocrlf true

git pull时出现error: cannot lock ref 'refs/remotes/origin/xxx 错误:

原因:本地分支和远程分支的引用关系被破坏了
解决方法:

  • 方法1:
# 更新reference
git update-ref -d refs/remotes/origin/[locked branch name]

# 拉取代码 
git pull
  • 方法2:
#删除掉 .git 目录下 分支 文件
rm .git/refs/remotes/origin/xxx

# 拉取代码 
git pull

fatal: detected dubious ownership in repository at '/xxx/yyy'

解决方法:

  • 方法1:修改文件的所有者
sudo chown zz /xxx/yyy -R
sudo chgrp zz /xxx/yyy -R
  • 方法2:手动禁用安全目录
git config --global --add safe.directory /xxx/yyy
posted @ 2019-12-24 20:10  D·Kingson.Mo  阅读(270)  评论(0编辑  收藏  举报