当前位置:   article > 正文

git命令实现代码管理和遇到的问题以及sourcetree可视工具_sourcetree 无法正常初始化git工作流 prefix无信息

sourcetree 无法正常初始化git工作流 prefix无信息

sourcetree

localhost双击(默认在当前分支)—>文件状态—>暂存所有—>提交—>master双击—>location右击—合并location至当前分支—>拉取—>推送—>localhost双击分支切换回来

遇到的问题及解决:
1、当前分支—>暂存—>提交—>双击切换到某个线上分支—>拉取(合并)后发现合并错了分支,此时推送上面有很多文件需要推送,千万不要推送,你还有救。一旦推送线上的代码就变了,那么怎么撤销此次操作呢,方法很简单

首先删除这个远端分支。在线上分支右击,删除这个分支,如果有弹窗提示,复制提示引号里面的这句话,大概是这样的 git branch -D [branchname],点击sourcetreen视图右上角"命令行模式",在命令窗口输入git branch -D [branchname],删除成功。
接下来是重新添加这个分支。在右边”远程“下面找到要拉取的远程分支,右击选择”检出XXX“。到这里就完成了。
  • 1
  • 2

git

代码提交

git checkout localhost     --默认在当前分支

1、git status     --查看修改状态

2、git add .     --暂存所有;如果要取消暂存git rm --cached 文件名/.,修改内容还在

3、git commit -m <注释>     --提交暂存的文件,并添加注释

4、git pull --rebase origin <branchname>     --将服务器代码同步到本地—拉代码

5、git push origin <branchname>     --本地同步到服务器—推送
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

拓展:
在2步暂存代码时如果报类似warning: LF will be replaced by CRLF in xxx这样的错误

git config --global core.autocrlf false
// 解析:不同操作系统下,处理换行的方法不同。core.autocrlf是git中负责处理line ending的变量,可以设置3个值:
// true、false、inout。false表示ine endings将不做转换操作,文本文件保持原来的样子。
  • 1
  • 2
  • 3

在第4步拉取代码时如果产生冲突,在冲突文件中修改后

1、git add <冲突文件路径>     --暂存冲突文件

2、git rebase --continue 

3、git pull --rebase 

4、git push origin <branchname>    --这一步就替代了上面的第5步

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在第4步拉取代码时拉取错了分支

首先慎用git reset --hard这个命令,百度都是让撤回操作,但是一撤回,本地修改的东西即使add commit了也找不到了
 --hard这个参数代表“删除工作空间改动代码,撤销commit,撤销git add,恢复到了上一次的commit状态”,你可能会丢失本地改动的代码,所以一定要先保存一份本地代码再做此操作,否则你会哭!!
目前我还没找到好的解决方法,如果你有好的方法欢迎留言。
  • 1
  • 2
  • 3

在第4步拉取代码时报错,提示Authentication failed for没有认证

这个一般是初次使用的时候没有认证,认证失败。
解决方法:在windows凭证上删除项目git地址证书。
步骤参考:https://blog.csdn.net/oqqYYYY1/article/details/80791044
  • 1
  • 2
  • 3

在第5步推送代码时报错,提示[rejected] <分支名> -> <分支名> (fetch first)或Git: RPC failed: curl 56 Recv failure: Connection was reset

使用git push -f 推送到远端
  • 1
// 关于这个Git: RPC failed: curl 56 Recv failure: Connection was reset提示,百度更多提到的是克隆的时候出现的这个错误,给出的解决方法:
git config --global http.postBuffer 524288000 // 更多提到的是加大缓冲区大小
git config --global http.sslVerify "false" // 这个我试了没用,本身设置的就是false
git config --global core.compression -1 // 压缩配置,对我也没用
// 然后我是在试https://codeleading.com/article/56225175941/这个链接下面方法的过程中摸索出来的方法
// 这个方法是可行的,但我最终也没用这个方法
git lfs install
git lfs track "*.so"
git add .gitattributes
 我远程上推送了.gitattributes这个文件,但我又想去掉,因为这个别人可能并不需要(之前都是好的,可能是我换了下网络,就我的有问题)。本地先把.gitattributes这个文件的提交下掉,然后本地这个下掉后的提交强推到远端(这就是本次的解决方案命令)。(这个方法命令下面“代码回退”有提到),这一步操作完后我又试了下git正常的推拉,发现竟然好了。
 我本来打算后面.gitattributes放在本地然后忽略这个文件的修改(下面有介绍该命令),每次就不用提交了,只对我本地使用,看来也不需要了。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

本地无任何修改拉服务器代码到本地:

1、git fetch -a     --将远程主机的更新全部更新到本地

2、git checkout <branchname>     --如果当前不在分支目录下切换到分支目录

3、git pull --rebase orign <branchname>     --将服务器代码同步到本地
  • 1
  • 2
  • 3
  • 4
  • 5

代码合并(将一个分支发布到另一个分支上,branchA拿branchB的代码):

1、git checkout branchA     --切换到要合并的分支上(本地)

2、git pull origin branchA     --把该分支远程上的代码pull到本地这个分支上,如果是自己一个开发就没有必要了

3、git merge --no-ff branchB     --对该本地分支的代码进行合并,no-ff严谨规范点的写法,可去掉

4、git push origin branchA     --将本地分支合并后的代码推送到远程分支上


// 如果只想将branchB上面的某一次提交合并到branchA,将第3步换成以下命令

首先:git log  --查看需要合并提交的commitID

其次:git cherry-pick <commitID>  --本地已经合并了(不需要指定要合并过来的分支名称)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

提交部分文件:

将指定文件放入缓存区(只能放编辑的文件,不能放新增的文件),本地代码将丢失(可恢复),是分支上的内容,本地没修改完的代码不想提交可以先放暂存区
1、git stash <filename>   -- 暂存不需要提交的文件(不指定文件就是暂存所有修改)

3、git add  <filename>  --提交需要提交的文件

后面接正常提交

git stash list      --查看暂存记录

git stash pop     --如果要恢复暂存内容,本地代码恢复(只恢复某次暂存加stash@{num})。

git stash show   stash@{0}   --查看某次记录的所有文件(只显示文件名)

git stash show -p  stash@{0}    --暂存某次记录的所有文件修改内容
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

修改(设置)提交用户

git config --list     --查看当前配置,有用户的账号和邮箱,也可以只查看当前账号邮箱

git config user.name     --查看当前账号

git config user.email     --查看当前邮箱

git config  --global user.name yourNeedUserName     --修改当前全局的用户名
git config  user.name yourNeedUserName     --如果只需要修改当前项目的用户名,此时命令要在需要修改的项目下执行

git config  --global user.email yourNeedUserEmail     --修改当前全局的用户邮箱
git config  user.email yourNeedUserEmail     --如果只需要修改当前项目的邮箱,此时命令要在需要修改的项目下执行
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

修改git仓库地址

git remote set-url origin <new_git_address>     --需要具体到项目目录
拓展:git remote -v   --查看当前仓库地址(修改前后可以核验下),如果git还有问题需核验用户信息(修改用户信息见上)
  • 1
  • 2

查看提交内容

git diff <filename>     --查看文件修改的内容,这一步要在git add .暂存文件之前查看,查看后输入q,按enter键盘退出

git log     --查看每个人提交的信息

git log --author=<username>    --查看某个人提交

git log -p     --比较提交

git log <filename>    --查看文件的历史提交,不显示内容修改

git log -p <filename>   --查看文件的每一个详细的历史内容修改

git log -p -3 <filename>     --显示最近的3次提交

git  show  <commitID>     --查看某次提交的文件修改内容

git show <commitID> --stat     --查看某次提交的文件
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

代码回退

1、git log      --查看所有的历史版本提交ID
2、git reset --hard <commitID>      --本地代码回退到某次提交(不带ID就回退到最新一次版本提交)
3、 git push -f -u origin master      推送到远程服务器(如果只是想看想测试这次提交就不要推送到远端了)
4、git pull      --重新拉代码(如果没有push,本地代码完美回到最新代码)

//如果只是想回退某个文件(最新一次的提交,比如在工作区已修改,但并未提交到暂存区(即并没有add),撤销文件修改)
git checkout -- <filename>

//如果想回退/撤回某个文件的某次提交
1、find -name <filename>      --查看这个文件的完整路径
2、git log <filename>       --查看文件的历史提交
3、git reset/checkout <commitID> <filename>   --使用reset或者checkout回退某个文件的某次提交

//删除、放弃、去掉某次提交(适用于中间的某次提交)
// 方法一:
git revert <commitID>   
// commitID为要删除的提交id(本地代码会删除掉此次提交修改的内容,与git reset --hard不同,这里相当于重新修改了代码,需要走正常的代码提交流程)
//方法二:功能更强大
git rebase -i <commitID>   --具体使用查看下面的“自由选择删除多条提交”讲解
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

自由选择删除多条提交

1、git rebase -i <commitID>   --commitI为要删除提交的下一次提交(紧跟着他后面的一次提交)id
2、此时会弹出编辑界面,将要删除的commit之前的单词改为drop
3、退出编辑:Esc-:wq(如果没有任何修改退出用q,如果修改了不保存修改用q!强制退出,注:!表示强制,wq!强制修改)-Enter
4、git log   --查看要删除的commit是否删除
5、git push  –force   ---强制推送到远程仓库
  • 1
  • 2
  • 3
  • 4
  • 5

.gitignore 里添加的文件无法忽略

1、git pull      --为避免冲突需要先同步下远程仓库
2、git rm -r --cached .(或filename)      --在本地项目目录下删除缓存(主要就是因为有本地缓存,其实到这一步就可以了)
3、git add .(或filename)       --add文件
4、git commit -m "同步ignore中的文件"      --将项目中文件提交到本地仓库缓存中
5、git push      --将修改推送到远端
  • 1
  • 2
  • 3
  • 4
  • 5

比较两个分支的差异:

git diff branchA branchB      --显示所有差异文件的具体代码差异
git diff branchA branchB --stat      --显示两个分支差异的文件有哪些
git diff branchA branchB <文件路径>      --显示某个文件的代码差异
  • 1
  • 2
  • 3

其他命令:

git rebase --abort     --是无风险的操作,会回到rebase操作之前的状态,2个分支的commits毫发无损(但最近发现也不是那么的无风险,可能是我rebase失败了,所以本地代码丢失了)

git  branch  -a     --之后master查看远程分支(如果git branch  -a没有发现要找的分支则用fetch,git  fetch  -a然后再git branch -a查看所有分支,checkout到要去分支),
git  branch     --查看本地分支

git  checkout <branchnanme>     --切换到某个分支

git config --global http.sslVerify false    --git clone报unable to access错误时,这个应该是修改git的配置

git fetch -p      --分支同步,如果有人新增、删除或修改了分支可以使用此命令更新下本地分支

git update-index --assume-unchanged <filename>      --忽略本地文件的修改(不需要修改和提交.gitignore文件)
git update-index --no-assume-unchanged <filename>      --取消忽略的文件

git branch -D <branchnanme>     --删除某个分支
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

更多checkout语法参考https://zhidao.baidu.com/question/361707989577121412.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/470383
推荐阅读
相关标签
  

闽ICP备14008679号