Git的常用总结

命令行中使用

1、开发代码初建 

clone远程仓库到本地:git clone 项目的git地址url  ,也可以指定分支:git clone -b v1.2 xxxx

新建本地分支v1.0.0:git branch v1.0.0

然后push到远程仓库,git push –u origin v1.0.0

其它开发者,拉取远程仓库

#将远程git仓库中v1.0.0拉取到本地(本地一开始不存在)只做一次

Git checkout –b v1.0.0 origin/v1.0.0

如果出现提示:

fatal: Cannot update paths and switch to branch 'dev2' at the same time.

Did you intend to checkout 'origin/dev2' which can not be resolved as commit?

表示拉取不成功。我们需要先执行 git fetch

再执行上面命令

【Git fetch将某个远程主机的更新,全部取回本地。默认情况下,git fetch取回所有分支的更新。】

2、代码提交 

2.1、分支管理命令

  • 本地分支

#查看所有分支 git branch –a 

#新建开发分支  git branch v1.0.0-hy-20170505-1 

#转到开发分支  git checkout v1.0.0-hy-20170505-1

上两条命令可以合并为一条:git checkout –b v1.0.0-hy-20170505-1

注:若切换分支不成功,则在后面加 –f  (代表强制执行)

《两个分支,git会管理两份代码,切换到哪分支就是哪份代码》

#删除本地分支 git branch -D v1.0.0-hy-20170506-1

  • 远程分支

# 查看远程分支:git branch –r

# 删除远程分支 :git push origin –-delete v1.0.1.6

# 本地没有远程的分支,则拉取远程分支

方法一:git fetch origin 远程分支名x:本地分支名x

使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checkout。

方法二:git checkout -b 本地分支名x origin/远程分支名x

使用该方式会在本地新建分支x,并自动切换到该本地分支x。

2.2、开发完,提交,拉取

开发完成后先提交代码到本地(未提交代码到本地,切勿切换分支)

  • Git status
  • Git add .
  • Git commit –m ‘[修改内容]视频处理相关的代码整合’

修改内容  参考模板:

[提交类型] 后台逻辑解耦
[相关单号]
[修改分析] 逻辑重新设计
[修改内容] 各检测方式模块化,与融合、推送隔开
[后续事项] 各模块重构、优化
[提醒备注]

#切换到v1.0.0,#切换到分支   git checkout v1.0.0

#从远程拉取最新的v1.0.0      Git pull (origin v1.0.0)

Pull

git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。它的完整格式稍稍有点复杂。

$ git pull <远程主机名> <远程分支名>:<本地分支名>

比如,取回origin主机的next分支,与本地的master分支合并,需要写成下面这样。

$ git pull origin next:master

如果远程分支是与当前分支合并,则冒号后面的部分可以省略。

$ git pull origin next

2.3、合并【非必须】

# 开发修改代码后,将开发分支与本地v1.0.0(这个分支应该是同远程分支,别人有改动的话就pull一次)合并

git checkout v1.0.0   #切换到分支

Git merge v1.0.0-hy-20170505-1

出现【On branch v1.0.0  Your branch is ahead of 'origin/v1.0.0' by 1 commit.】

# 编译,看大伙的修改是否获取到,编译调试、功能是否正确。

2.4、推送

#将本地v1.0.0 推送到远程v1.0.0分支   Git push

不带任何参数的git push,默认只推送当前分支

(git push origin v1.0.1:v1.0.1)

注:前一个v1.0.1必须为你本地存在的分支,后一个v1.0.1为远程分支,如果远程v1.0.1不存在则会自动创建分支。

(git push origin v1.0.1) 将本地分支v1.0.1 推送到origin主机的对应分支。

2.5、代码还原

参考:git怎样还原所有修改

如果是修改的代码尚未提交,

git checkout -- aaa.html // 指定还原`aaa.html`文件

git checkout -- * // 还原所有文件

 

VS中 使用

1、克隆远程仓库已有分支

当作为一个新成员参与别人已经建好的项目中,此时远程已经有有一些分支了。

1、克隆

从远程下载代码步骤如下:打开VS,切换到“团队资源管理器”,点上方“主页”右侧的下拉三角,选择项目->连接到团队项目,然后选择“克隆”,填入Git的Remote Url和要克隆到的本地目录(该目录必须为空),然后点克隆按钮即可将项目克隆到本地。

     

2、本地拉取远程的一个新分支

只需单击同步里面的 提取。

 

 常见名词解释

拉取(Pull):将远程版本库合并到本地版本库,相当于(Fetch+Meger)

获取/提取(Fetch):从远程版本库获得最新版本

合并(Meger):将两个版本库进行合并操作

提交(Commit):将所做的更改,存入本地暂存库

推送(Push):将所做的更改,存入远程版本库

同步(Pull+Push):先将远程库拉取,再将本地库推送到远程库,相当于(Pull+Push)

变基到(Switch):切换分支(双击即可切换)

 

git  pull     从远程拉取最新版本 到本地  自动合并 merge            git pull origin master。。即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决。

git  fetch   从远程获取最新版本 到本地   不会自动合并 merge    git fetch  origin master       git log  -p master ../origin/master     git merge orgin/master

实际使用中  使用git fetch 更安全    在merge之前可以看清楚 更新情况  再决定是否合并

2、初建项目并push到github上

1、若先在远程GitHub创建苍仓库

在远程Github等服务器新建一个空Repositories,这里起名GitTest。

打开VS2013,新建项目GitTestProject,右键单击解决方案,选择“将解决方案添加到源代码管理器”,选择Git

同步,推送到远程仓库

注:若没有的这个选项话,也可以用git bash去操作:

连接远程仓库,在本地的命令框中输入下面的命令,即连接到了名为poster的仓库上

git remote add origin https://github.com/xxxx/yyy.git 

把本地项目推送到远程仓库:

git push -u origin master

2、远程GitHub不先创建仓库

打开VS2019,新建项目GitTestProject,右键单击解决方案,选择“将解决方案添加到源代码管理器”,选择Git 

同步-》push to GitHub-》登录账户

登录成功后,直接点Publish

3、提交代码

暂存想提交的文件,不想提交的右键暂存。提交临时文件,拉取再推送。

有冲突时,可以点击冲突,然后对比文件,选择使用远程的代码还是本地代码,然后再次提交。

4、忽略文件

把某些目录或文件加入忽略规则,后发现并未生效,原因是.gitignore只能忽略那些原来没有被追踪的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。

那么解决方法是先把本地缓存删除:

git rm -r --cached .
将本地代码重新加入
git add .

不想提交的文件,最好一开始提交 之时 就不要提交到远程。

5、还原修改

如果提交了一次代码到远程,然后发现想撤销上次提交,即想要还原修改,转到修改还原的代码处,单击方法引用处的

在右侧即可点还原操作。然后单击同步,进行同步到远程即可。

若想对还原的修改撤回,则对还原的那次提交 邮件点击 还原 即可。

git提交日志导出为文件

可以使用git bash工具,利用git log命令导出

在项目根目录下执行命令,导出 git 提交记录到根目录:【注意命令中的符号要英文状态下的】

git log --pretty=format:'"%ai", "%an","%s"' --since="100 day ago" >> log.csv

上述命令时指定时间从100天开始的:--since="100 day ago"

如果想导出某些提交者的提交记录,可以用 grep过滤,比如我想导出「hy」这个人在项目中的提交记录:

git log --pretty=format:'"%ai", "%an","%s"' --since="100 day ago" | grep hy >> log.csv 

更多参考:git log 的使用

附:导出的CSV为乱码格式问题

EXCEL打开的CSV文件默认是ANSI编码,如果CSV文件的编码方式为utf-8、Unicode等编码可能就会出现文件乱码的情况。

解决方法:

使用记事本打开CSV文件。点击菜单:文件-另存为,编码方式选择ANSI。保存完毕后,再用EXCEL打开这个文件就不会出现乱码的情况。

若csv编辑后保存不生效,可以将csv打开后,全部复制到一个新的excel表格中进行编辑。

常见问题

1、Git Push Error: dst refspec xxxx(分支号) matches more than one.

最近工作中遇到这样的问题,使用的是Git做版本控制,在PUSH代码的时候,出现如下错误:

  1. error: dst refspec XXX matches more than one.
  2. error: failed to push some refs to 'git@xxx.xx:xxx.git'

初步一看,还想,怎么可能,出现两个相同的分支?表示很不解。
查看Git服务器上的分支也只有一个指定名称的分支,最后无意间发现服务器上有一个和分支名称相同的tag,按照项目组的习惯,tag一般都是以时间作为名称的,这里怎么会出现这个,好奇中删掉它重试,果然,Git把tag和分支搞在一起了,tag名称不能和分支名称完全相同,不知道这是Git个别版本的bug还是就这样机制。

2、git中进入带有空格的目录下的解决办法

比如,要进入Program Files目录下,有两种方法:

  • 将Program Files目录用引号引起来。

  $ cd "Program Files"

  • 将空格处使用空格引号

  $ cd Program" "Files

3.Git clone 错误 | error: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054

详细见

4.Permanently added the RSA host key for IP address '192.30.255.113' to the list of known hosts.

为IP地址192.30.255.113的主机(RSA连接的)持久添加到hosts文件中。

详细见

5.Windows下git出现Permission denied的解决办法

本地git bash 使用git clone git@github.com:***.git方式下载github代码至本地时需要依赖ssh key,遇到权限不足问题时一般都是SSH key失效或者SSH key不存在,重新创建SSH key一般就可以解决问题;

详细见

6.Github仓库太大,公司限制速度,下载不了

可以尝试用 码云 去搜下是否有相同的库

7、Git每次push都需要输入用户名和密码

问题:
已经添加了 SSH key,但是 push 的时候,需要输入,用户名和密码

原因:
出现这种情况的原因是我们使用了http的方式clone代码到本地,相应的,也是使用http的方式将代码push到服务器。

git clone https://github.com/xxxxx

这就容易导致这个问题的出现。而如果采用ssh方式的话,是这样clone代码的:

git clone git@github.com:xxxxx

解决办法:

将http方式改为ssh方式即可。

1.先查看当前方式:git remote -v

2.把http方式改为ssh方式。先移除旧的http的origin:git remote rm origin

3.再添加新的ssh方式的origin:git remote add origin git@github.com:xxxx/linux-system-programming.git

4.改动完之后直接执行git push是无法推送代码的,需要设置一下上游要跟踪的分支,与此同时会自动执行一次git push命令,此时已经不用要求输入用户名及密码啦!

git push --set-upstream origin master

8、忽略.gitignore文件与文件状态

忽略文件只能忽略状态为“Untracked files”的文件。

在Git中,文件状态是一个非常重要的概念,不同的状态对应不同的操作。

Git在未进行commit操作之前,存在三种状态:

  • Untracked files
  • Changes not staged for commit
  • Changes to be committed

1、Untracked files就是你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦,等等。那么看着也烦怎么处理呢?

解决:在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。

2、对于已经进了暂存区,想丢弃改变,让文件处理忽略状态。可以用

git checkout filename

或者一个文件夹忽略:git checkout  xxx/bin/

 

 参考:

VS2013中使用Git建立源代码管理

VS2015 Git 源码管理工具简单入门

使用Git进行协同开发Git 工作流程

 

posted @ 2018-10-11 20:42  peterYong  阅读(5932)  评论(0编辑  收藏  举报