GIT:常用命令及问题总结

原理及常用命令

在这里插入图片描述
在这里插入图片描述

图解常见操作

  • Working Directory:即工作区。操作系统层面的目录树结构,也可以理解为一个tree目录对象
  • Stage(Index):即暂存区,为等待Commit的文件列表。是以扁平的文件清单实现的,不过从理解层面上也可以理解为tree目录对象
  • Local Repository(History):本地版本库。有向无环图,其每一个节点都是一个tree目录对象,Head也表示本地仓库
  • Remote Repository:远程版本库。有向无环图,其每一个节点都是一个tree目录对象
    在这里插入图片描述

注:图中的git checkout – ①②步骤的含义是当在暂存区中有修改时,优先使用暂存区中的修改覆盖工作区

常用命令

主要参考链接: https://www.jianshu.com/p/93318220cdce

# 列出本地所有分支
git branch
# 基于当前分支创建新的分支
git branch <新分支名>
# 删除本地分支
git branch -d <分支名>
# 强制删除本地分析
git branch -D <分支名>

# 切换本地分支
git checkout <分支名>
# 本地没有远端分支,希望获取远端新分支并切换到新分支
# 比如:你本地只有master分支,并在master分支上,你希望获取远端的release分支,自动在本地创建release分支,且与远端的release分支保持追踪关系,同时本地的分支会切换到release分支, 就使用如下命令
git checkout -t origin/<远端新分支名>
或者 git checkout --track origin/<远端新分支名>
例如 git checkout -t origin/release

# 创建并切换到指定的分支,保留所有的提交记录
# 等同于 "git branch" 和 "git checkout" 两个命令合并
git checkout -b <分支名称>

# --------cherry-pick操作,当你在A分支提交了一个记录,也想把这个记录提交到B分支时,可采取如下操作-----------
git log # 第一步:在A分支上使用git log 找到commit id,按回车查看更多log, 按q退出。
# git log app.ts
git checkout b # 第二步:切换到B分支
git cherry-pick d34bcef232f6c # 第三步:copy这个commit到你当前的A分支,这样就可以了。

# 查看其他人新增的branch,获取到他的分支信息
git fetch

# 删除远程分支
git push -d origin <分支名>

# 将A分支merge到分支B, 首先得切换到分支B
git merge A

# 将远程分支development拉取到本地,并创建本地分支development
git fetch origin development:development
# If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/development development

问题: git ignore 添加忽略文件不生效解决办法

#这里可以写下注释,以表明这条规则的目的。 如下例子,表明不再track hello.class这个文件,应为这个是编译生成的文件,我们只要有源代码就可以生成该文件
hello.class

#我们也可以使用通配符,下面例子表明不再track所有以class结尾的文件
*.class

#使用!表示特例,表示在前面的规则应当排除指定的特殊文件。
#下面例子表示register.class不适用*.class这条规则,应该被提醒track
!register.class

#也可以对一个目录进行处理,以下例子表明testDir中的所有文件或者目录都不被track
testDir/

#也可以仅仅对一个目录下的文件进行处理,如下面例子表明testDir2目录下的所有以doc结尾的文件不被track,其他的文件将被提醒track,如/testDir2/hello.txt

/testDir2/*.doc

原因是gitignore只能忽略那些尚未被track的文件,如果某些文件已经被纳入了版本管理中,则修改gitignore是无效的。 一个简单的解决方法就是先把本地缓存删除(改变成未track状态),然后再提交。

git rm -r --cached .
git add .
git commit -m 'update .gitignore'

问题:向github提交代码是老要输入用户名密码

执行如下命令,然后git push时输入一次密码后,它就将密码存起来了,下次push时就不需要输入密码了。

git config --global credential.helper store

参考链接 https://www.jianshu.com/p/81ae6e77ff47

问题:SSL certificate rejected trying to access GitHub over HTTPS behind firewall

参考链接 https://stackoverflow.com/questions/3777075/ssl-certificate-rejected-trying-to-access-github-over-https-behind-firewall

git config --global http.sslVerify false
#或者
git config http.sslVerify false

问题:git push origin与git push -u origin master的区别

git push 如果当前分支与多个主机存在追踪关系,那么这个时候-u选项会指定一个默认主机,这样后面就可以不加任何参数使用git push。
git push -u origin master 上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。

不带任何参数的git push,默认只推送当前分支,这叫做simple方式。此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方式。
当在git主机上创建一个repository(如在github上创建一个repositoy)后,需要将本地的代码初次推送到git主机上时,需要用到git push -u origin master,下次push时就可以直接使用git push了

问题:如何push一个已存在的Repository到服务器

git add -A # 将所有的文件放到index中,和  
git commit -m 'init' # 将index中的文件commit到本地仓库
git remote add origin https://wucong60.visualstudio.com/_git/Mvc4Demo 
git push -u origin --all

问题:查看被删除的branch 并还原

git reflog 
git show 8c35e6b
git checkout 8c35e6b 
git checkout -b newbranch

问题:How do you delete untracked local files from your current branch?

git clean -fd

http://stackoverflow.com/questions/61212/how-to-remove-local-untracked-files-from-the-current-git-branch

总结

发布了105 篇原创文章 · 获赞 46 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/wucong60/article/details/86772017