Linux安装git远程拉取代码并设置免密更新

安装git

yum install git

提示是否可以
Linux安装git远程拉取代码并设置免密更新_第1张图片输入y回车即可安装
Linux安装git远程拉取代码并设置免密更新_第2张图片

设置用户名

git config --global user.name'xxxxx'
git config --global user.email'[email protected]'

进入对应文件夹进行初始化

git  init

此时在该目录下会生成一个.git文件夹

拉取远程仓库代码

git clone http://xxxxx.git

设置永久保存账号密码

进入你的项目文件夹,执行如下指令

git config credential.helper store

然后执行一次拉取

git pull

重新输入一次账号密码,下一次执行git pull时则不再提示

liunx本地有改动git pull失败

git pull拉取远程仓内容的时候有可能会出现以下报错:

error: Your local changes to the following files would be overwritten by merge:
xxx/xxx/xxx.php
Please, commit your changes or stash them before you can merge.
Aborting

这是由于你liunx本地项目有修改而与远程仓的代码冲突,此时有3种解决办法:

  • 直接commit本地的修改(不建议
  • 通过git stash将工作区恢复到上次提交的内容,同时备份本地所做的修改,之后就可以正常git pull了,git pull完成后,执行git stash pop将之前本地做的修改应用到当前工作区(常用)
git stash
git pull
git stash pop
  • 放弃本地修改,拉取远程仓代码,原修改代码会丢失并不可恢复(与远程仓一致)
git reset --hard
git pull

更换远程仓

进入项目所在目录

  • 方法一
    查看所有远程仓库
 git remote

查看远程仓

git remote -v

重新设置你新的远程仓库地址

git remote set-url origin http.xxx.git

GIT实现本地和远程仓已经建立关联,但本地修改不再关联并不删除远程仓内容

从远程仓库拉取下来到本地的文件A,本地修改了,但修改不想再被跟踪提交,远程仓库A文件因为多人共用,所以不能删除:
进入项目文件夹,右键Git Bush Here
输入指令:git update-index --assume-unchanged
如果要忽略的是文件,则后面直接写文件名,如a.txt :

git update-index --assume-unchanged a.txt

如果要忽略的是文件夹,则后面写文件夹名加/,如文件夹A :

git update-index --assume-unchanged A/

一旦使用assume-unchanged,文件将不再从远程仓库pull更新,也不再push推送远程仓库了。
如果要恢复跟踪,可使用指令:git update-index --no-assume-unchanged

如果即想要远程仓库对应文件的更新,又不想要将自己本地的修改提交(即关闭GIT跟踪本地文件修改):
进入项目文件夹,右键Git Bush Here
输入指令:git update-index --skip-worktree

git update-index --skip-worktree a.txt

skip-worktree:不会关闭本地文件对远程仓库的跟踪,只是告诉Git不要跟踪对本地文件的更改,pull时会拉取最新的更新。

但要更新则需要no-skip-worktree再pull拉取合并最新更新(即打开GIT跟踪本地文件修改):

git update-index --no-skip-worktree a.txt

某文件夹内文件大批量变动(增删改)后拉取线上后冲突,合并解决后又想放弃本地修改

1.进入项目,右键git bush here ,输入git status 查看状态,出现三个状态列表:

Untracked files未跟踪的状态,这是文件的初始状态,也就是在工作区中的状态,就是新建的文件/文件夹,也没有操作过git add,git压根不知道你这个文件的信息,没有生成快照

Untracked files:
  (use "git add ..." to include in what will be committed)

这个状态下排列的是新建的文件和文件夹

Changes to be committed 即文件在暂存区中生成了快照等待被提交(commit)

Changes to be committed:
  (use "git restore --staged ..." to unstage)

这个状态下排列的是大量A文件夹目录下的删除和修改

Changes not staged for commit 即文件生成过快照,但是又有了新的修改,并且没有生成新的快照

Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git restore ..." to discard changes in working directory)

这个状态下排列的是大量A文件夹目录下的修改

**三种状态的变换:**①-(git add)-》②-(未commit提交到线上,本地再次修改)-》③

正常git status后只会有状态①或者没有任何更新,如果存在状态①的文件,需要提交,则可以使用指令:git add 文件名 或者 git add . 即将工作区的某个文件、某些文件、或者是所有文件,所作出的修改(新建、删除也算的),添加至暂存区,此时文件就可以进行下一步的git commit了,再使用git status可以看到这些文件的状态变成了②

如果有存在③状态的文件,意思是这些文件有修改的部分没有生成快照,不能进行commit提交
git区域分为工作区(本地所有文件)暂存区(git add 的文件,即提交的文件),使用git commit或点击推送到远程仓会把暂存区的文件更新到远程仓,③状态即还未推送又修改了暂存区的内容

要清理git status下的三种状态文件,使本地与线上关联的文件保持一致:
线上指引:
1清除③状态文件,使用指令:git reset HEAD 文件名或文件夹名
git reset既可以用在版本回退,也可以用在撤销暂存区的修改,将文件重新放回工作区,HEAD代表此前的最新版本;
2清除②状态文件,使用指令:git checkout 文件名或文件夹名
git checkout将该文件在工作区中的修改,全部撤销,返回到最近一次git commit或者git add时的状态;
3再次使用git status可以看到只剩下状态①的文件了

本地测试结果:
1指令操作完之后,git status查看,原来存在①②③三种状态的文件,只剩下①③状态,并且③状态的所有文件前面都带上了modified:
Linux安装git远程拉取代码并设置免密更新_第3张图片
接着操作2指令后,git status查看,只剩下①状态,完成。但从状态的转变看并不是理论上的把③变成②后撤销工作区修改,而是把②变成了③后取消了该文件夹的所有修改同步了线上

补充:
已经使用git commit 提交到本地分支上的修改 回退:可以采用版本回退,回到之前的版本

方案一:

git reset --hard HEAD^

注:HEAD为当前版本、HEAD^为上一个版本、HEAD^^为上上个版本,以此类推

方案二:
先使用 git log --pretty=online 查看版本号记录,再使用git reset --hard 版本号回到之前版本

git log --pretty=online
git reset --hard 版本号

你可能感兴趣的:(git,linux)